MapStruct映射报错:源参数不存在rDAccount属性问题求助
MapStruct映射报错:No property named "rDAccount" exists in source parameter(s)
问题原因
字段rDAccount的命名不符合标准JavaBean驼峰规范,导致Lombok生成的getter方法为getRDAccount(),而MapStruct默认按照JavaBean规范解析属性名时,会将该getter对应的属性识别为RDAccount,而非你在@Mapping中指定的rDAccount,因此触发属性不存在的错误。
解决方案
方案一:修改Mapper中的source属性名
直接将@Mapping中的source值改为MapStruct识别的RDAccount:
@Mapper(componentModel = "spring") public interface CustomMapper { @Mapping(source = "RDAccount", target = "xfaceRDAccount") TargetClass mapToTarget(SourceClass sourceClass); }
方案二:调整字段名至标准驼峰格式
将SourceClass中的字段名改为标准驼峰格式(首字母小写,后续单词首字母大写),比如rdAccount,这样Lombok生成的getter为getRdAccount(),MapStruct能直接匹配属性名:
@Data public class SourceClass { private String rdAccount; }
同时同步修改Mapper中的source配置:
@Mapping(source = "rdAccount", target = "xfaceRDAccount")
方案三:配置MapStruct的命名策略
在Mapper接口上指定accessNamingStrategy属性,让MapStruct直接根据getter方法名去掉get前缀后匹配属性名,无需严格遵循驼峰规范:
import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.accessor.GetterAccessorNamingStrategy; @Mapper(componentModel = "spring", accessNamingStrategy = GetterAccessorNamingStrategy.class) public interface CustomMapper { @Mapping(source = "rDAccount", target = "xfaceRDAccount") TargetClass mapToTarget(SourceClass sourceClass); }
内容的提问来源于stack exchange,提问作者Ankur Upadhayay
相关产品推荐
相关产品推荐

