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

Spring环境下MapStruct的AMapper如何调用同入参BMapper映射属性

MapStruct 跨Mapper同入参属性映射解决方案

方案1(推荐:编译期类型安全,无需手动写表达式)

你不需要使用expression即可实现需求,直接通过@Mapping注解指定源为整个入参对象即可,MapStruct会自动调用uses中配置的BMapper完成转换:

@Mapper(componentModel = "spring", uses = BMapper.class)
public interface AMapper {
    // source = "." 代表使用方法的整个入参CommonEntity作为转换源
    @Mapping(target = "fieldB", source = ".")
    A mapToDomain(CommonEntity entity);
}

原理:MapStruct会自动扫描所有通过uses引入的Mapper,匹配输入参数为CommonEntity、返回值为B类型的转换方法,自动在生成的实现类中注入BMapper并调用,完全避免依赖找不到的问题。

方案2(必须使用expression的正确写法)

你之前报错的核心原因是expression中引用的BMapper实例名错误,Spring组件模型下,MapStruct生成的实现类中注入的BMapper实例默认名称为类名首字母小写的bMapper,正确写法如下:

@Mapper(
    componentModel = "spring",
    uses = BMapper.class
)
public interface AMapper {
    @Mapping(
        target = "fieldB",
        // 注意这里的实例名是bMapper,入参名要和方法定义的入参名entity保持一致
        expression = "java(bMapper.mapToDomain(entity))"
    )
    A mapToDomain(CommonEntity entity);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:27:06