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

MapStruct命名映射方法使用@Context额外参数编译失败求助

解决方案

错误原因

你遇到的编译错误核心是MapStruct无法正确匹配带@Context参数的限定映射方法:

  • 抽象方法中的String type参数未标记为@Context,导致MapStruct无法将其传递给@Named("toOrderDetails")的方法
  • 由于上下文参数未被识别,MapStruct找不到符合签名的限定方法,进而抛出映射失败的错误

修正步骤

  1. 给抽象方法的type参数添加@Context注解:明确告诉MapStruct这是一个上下文参数,需要传递给下游的映射方法
  2. 保持限定方法的参数签名匹配:限定方法的@Context参数会自动和抽象方法的@Context参数关联,无需在@Mapping中额外配置

修正后的代码

@Component
@Mapper(componentModel = "spring")
public abstract class OrderMapper {

    @Autowired
    private ObjectMapper objectMapper;

    @Mapping(source = "type", target = "type")
    @Mapping(source = "resource.data", target = "properties", qualifiedByName = "toOrderDetails")
    public abstract Order toEntity(final OrderResource resource, @Context final String type);

    @Named("toOrderDetails")
    public OrderDetails maptoOrderDetails(final Map<String, Object> data, @Context final String type) {
        // handle data and type...
        return new OrderDetails();
    }
}

补充说明

  • @Context参数不会被当作映射的源或目标属性,而是作为额外的上下文信息在映射链中传递
  • 当使用qualifiedByName时,MapStruct会自动匹配带有相同@Context参数的方法,无需在@Mapping中指定上下文参数的来源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:30:24