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

如何无需自定义映射器和@AfterMapping为列表对象映射指定值

解决方案

可以实现,无需自定义映射器或@AfterMapping注解。问题出在你直接对List集合做映射时,MapStruct无法自动将方法参数的id传递给每个Target对象。正确的做法是先定义单个对象的映射方法,再让MapStruct自动生成集合映射逻辑:

  1. 定义Mapper接口,添加单个对象的映射方法,明确指定id参数到Target.id的映射:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import java.time.LocalDate;
import java.util.List;

@Mapper
public interface SourceTargetMapper {
    // 单个对象映射:将方法参数id赋值给Target.id,其余字段自动映射
    @Mapping(target = "id", source = "id")
    Target mapSourceToTarget(Long id, Source source);

    // MapStruct会自动基于上面的单个方法生成集合映射逻辑
    List<Target> mapSourcesToTargets(Long id, List<Source> sources);
}
  1. 调用mapSourcesToTargets方法时,MapStruct会遍历输入的Source列表,对每个元素调用mapSourceToTarget方法,传入同一个id参数,完成每个Target对象的id赋值和其他字段的自动映射。

你之前直接写集合映射方法并添加@Mapping注解无效,是因为集合映射的注解无法直接作用于集合内的每个元素,必须通过单个对象的映射方法来传递参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:33:06