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

如何用MapStruct将嵌套EntityPO映射至继承AIOwner的AICoBorrower?

解决方案:复用MapStruct基类映射实现子类嵌套对象映射

核心思路

利用MapStruct的@Mapper继承特性、嵌套属性路径表达式,以及uses属性复用已有的基类Mapper,直接将CoBorrowerPO中嵌套的EntityPO映射到继承自AIOwner的AICoBorrower,无需重复编写基类字段的映射规则,确保基类映射变更自动同步到子类。

步骤实现

1. 确认已有基类Mapper(AIOwnerMapper)

确保AIOwnerMapper已正确实现EntityPO到AIOwner的映射,示例代码:

@Mapper(componentModel = "spring")
public interface AIOwnerMapper {
    AIOwnerMapper INSTANCE = Mappers.getMapper(AIOwnerMapper.class);

    @Mapping(source = "businessName", target = "name1")
    AIOwner entityPoToAiOwner(EntityPO entityPO);
}

2. 定义子类Mapper(AICoBorrowerMapper)

通过@Mapper的uses属性引入AIOwnerMapper,并使用嵌套属性路径指定映射源,自动复用基类映射规则:

@Mapper(componentModel = "spring", uses = AIOwnerMapper.class)
public interface AICoBorrowerMapper {
    AICoBorrowerMapper INSTANCE = Mappers.getMapper(AICoBorrowerMapper.class);

    // 直接映射嵌套的entityPO到AICoBorrower的基类字段
    @Mapping(source = "entityPO", target = ".")
    AICoBorrower coBorrowerPoToAiCoBorrower(CoBorrowerPO coBorrowerPO);
}

3. 关键特性说明

  • @Mapping(source = "entityPO", target = "."):将CoBorrowerPO中的entityPO对象字段,按照AIOwnerMapper的规则映射到AICoBorrower的对应字段(包括继承自AIOwner的firstName、name1)。
  • uses = AIOwnerMapper.class:告知MapStruct复用该Mapper的映射逻辑,当AIOwnerMapper的规则(如新增字段、修改映射关系)变更时,AICoBorrowerMapper会自动同步,无需手动修改。
  • 继承映射自动生效:由于AICoBorrower继承自AIOwner,MapStruct会自动识别基类字段的映射规则,无需在子类Mapper中重复编写@Mapping注解。

验证效果

传入CoBorrowerPO时,MapStruct会自动完成以下操作:

  • 提取CoBorrowerPO中的entityPO对象
  • 调用AIOwnerMapper.entityPoToAiOwner完成基类字段映射
  • 将结果赋值给AICoBorrower实例(包含所有继承字段)

这种方式既避免了重复代码,又保证了基类映射变更的自动同步,完全满足需求。

内容的提问来源于stack exchange,提问作者Sage Belknap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:05:09