MapStruct子类继承场景下仅转换父类字段的解决方法咨询
解决MapStruct仅转换父类字段的问题
问题根源
你的OpenSecretEntity中重复声明了父类BasicEntity已有的id字段,这会导致MapStruct在解析子类字段时出现识别异常,同时Lombok生成的getter/setter会覆盖父类方法,干扰MapStruct的字段映射逻辑,最终只生成父类字段的转换代码。
解决方案
方案1:移除子类中重复的字段(推荐)
直接删除OpenSecretEntity中重复的id字段,因为该字段已经从父类BasicEntity继承:
@EqualsAndHashCode(callSuper = true) @Data @NoArgsConstructor @AllArgsConstructor public class OpenSecretEntity extends BasicEntity { // 移除重复的private Long id; private String secretId; private String secretKey; private String remark; private Boolean enabled; private Date effectStart; private Date effectEnd; }
方案2:显式声明父类映射方法(兼容场景)
如果无法移除重复字段,可在映射接口中添加父类到父类的映射方法,让MapStruct自动继承映射规则并处理子类扩展字段:
@Mapper(componentModel = "spring") public interface OpenSecretStructMapper { // 定义父类之间的基础映射 BasicDto toBasicDto(BasicEntity entity); // 子类映射会自动复用父类映射逻辑,同时处理子类特有字段 OpenSecretDto toDto(OpenSecretEntity entity); }
验证效果
修改后重新编译项目,MapStruct生成的实现类会自动包含secretId、secretKey、remark等子类特有字段的转换代码,完成全字段映射。
内容的提问来源于stack exchange,提问作者xw z
相关产品推荐
相关产品推荐

