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

MapStruct中List集合映射如何使用@Named注解消除方法歧义

MapStruct集合转换指定元素转换方法的解决方案

错误原因

你使用了错误的注解配置:@Mapping 注解是用于单个对象内部的字段映射规则配置,强制要求指定target属性对应目标类的字段名,因此直接加在List类型的转换方法上会触发必填参数校验错误。

正确实现

集合/迭代类型的转换规则需要用@IterableMapping注解配置,该注解专门用于集合类转换的全局规则指定,支持qualifiedByName属性绑定@Named标注的单个元素转换方法,示例代码如下:

// 使用@IterableMapping配置集合元素转换的限定器
@IterableMapping(qualifiedByName = "LineTestBO")
List<ReturnABO> toCaptureLineItemsBOs(List<LineDTO> lineDTO);

@Named("LineTestBO")
default ReturnABO map(LineDTO lineDTO) {
    // 注意调整空判断顺序:先判断lineDTO本身非空再调用其getter方法,避免空指针异常
    if (lineDTO != null && lineDTO.getCurrency() != null && lineDTO.getNationalPermit() != null &&
        lineDTO.getAmount() != null) {
        return this.toBO(lineDTO);
    }
    return null;
}

default ReturnABO toBO(LineDTO lineDTO)  {
  // 原有业务逻辑
}

配置后MapStruct生成集合转换实现时,会自动遍历所有元素,调用@Named("LineTestBO")标注的转换方法处理每个元素,不会和同入参出参类型的toBO方法产生转换歧义。

额外注意

如果是Map类型的转换需要指定KV转换规则,可以使用@MapMapping注解,用法和@IterableMapping类似。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:24:04