You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:09:53