MapStruct多参数映射问题:参数无法映射至嵌套属性
MapStruct多参数映射嵌套属性失效解决方案
你当前的映射配置问题在于没有明确指定源参数,MapStruct无法自动识别要从方法的第二个、第三个参数取值。qualifiedByName是用来匹配自定义转换方法的注解,不是用来指定源参数的,所以直接用它不会生效。
修正后的基础映射代码
如果不需要对shortText和longText做额外转换,直接通过source指定方法参数名即可:
@Mapping(target = "content.shortText", source = "shortText") @Mapping(target = "content.longText", source = "longText") EntityDto mapToDto(Entity entity, String shortText, String longText);
带自定义转换逻辑的场景
如果你的文本需要额外处理(比如截断、格式转换),再结合qualifiedByName使用,先定义带命名的转换方法:
@Named("shortTextProcessor") public String processShortText(String input) { // 示例:截断到20个字符并去除首尾空格 return input.trim().substring(0, Math.min(input.length(), 20)); } @Named("longTextProcessor") public String processLongText(String input) { // 示例:添加前缀标识 return "[LONG] " + input; }
然后在映射方法中同时指定source和qualifiedByName:
@Mapping(target = "content.shortText", source = "shortText", qualifiedByName = "shortTextProcessor") @Mapping(target = "content.longText", source = "longText", qualifiedByName = "longTextProcessor") EntityDto mapToDto(Entity entity, String shortText, String longText);
这样调用mapToDto(myEntity, "Hello", "WorldLong")时,就能正确将参数值映射到content的嵌套属性中。
内容的提问来源于stack exchange,提问作者Toni26
相关产品推荐
相关产品推荐

