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

如何使用MapStruct链式调用已有映射器实现A→C转换?

复用已有MapStruct映射器实现A→C链式映射

你可以直接依赖MapStruct的自动映射路径推断能力,不需要手动编写toC(A a)的实现,具体处理方式如下:

  1. 保留抽象方法,移除手动实现
    直接保留public abstract C toC(A a);这个抽象方法即可,MapStruct会自动识别现有的A→B和B→C映射方法,生成和你预期一致的链式调用实现逻辑。

  2. @AfterMapping会自动触发对应逻辑
    你定义的两个additionalStuff方法会被MapStruct自动匹配执行:

  • 调用toB(A a)转换时,会触发additionalStuff(A a, @MappingTarget B b)
  • 完成C实例的链式生成后,会触发additionalStuff(A a, @MappingTarget C c)

最终简化后的Mapper类代码如下:

@Mapper
public abstract class TestMapper {

    public abstract B toB(A a);
    public abstract C toC(B b);

    // MapStruct自动生成链式调用的实现
    public abstract C toC(A a);

    @AfterMapping
    protected void additionalStuff(A a, @MappingTarget B b) {
        // some mapping logic
    }

    @AfterMapping
    protected void additionalStuff(A a, @MappingTarget C c) {
        // some mapping logic
    }
}

如果遇到存在多个可选转换路径的复杂场景,也可以通过@Mapping注解显式指定转换逻辑,示例如下:

@Mapping(target = ".", expression = "java(toC(toB(a)))")
public abstract C toC(A a);

不过这种显式声明在大多数简单链式映射场景下是多余的,MapStruct的自动推断已经能满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:47:30