MapStruct映射父类字段报错:目标类无parentField属性(已存在Getter/Setter)
解决MapStruct父类属性未映射的问题
问题原因
你遇到的错误是因为MapStruct解析@Mapping的target时,默认只会检查目标类(Child)自身声明的字段,不会自动识别父类(Parent)继承来的属性——哪怕该属性已经有对应的Getter/Setter方法。
解决方案
方案1:移除显式@Mapping,依赖自动映射
由于ChildDTO和父类Parent的属性名完全一致(都是parentField),MapStruct可以自动识别并映射继承的属性,不需要手动指定@Mapping。修改后的Mapper代码如下:
@Mapper(componentModel="spring") public interface ChildMapper { Child toEntity(ChildDto dto); }
MapStruct会自动生成调用Child父类Parent的setParentField()方法的代码,完成属性映射。
方案2:显式指定父类属性路径(可选)
如果因特殊场景需要保留显式映射,可以通过target指定父类属性的完整路径:
@Mapper(componentModel="spring") public interface ChildMapper { @Mapping(target="parentField", source="parentField") // 或者更明确的写法: // @Mapping(target="parent.parentField", source="parentField") Child toEntity(ChildDto dto); }
不过通常方案1已经足够解决问题,更简洁高效。
额外检查
确保Parent类的parentField确实有正确的Getter(getParentField())和Setter(setParentField(String))方法,MapStruct依赖这些方法完成属性的读写操作。
内容的提问来源于stack exchange,提问作者Evgen Kr
相关产品推荐
相关产品推荐

