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

如何使用@Mapping将Orika映射规则改写为MapStruct实现且不新增额外方法

结论:不可以

MapStruct 并没有兼容 Orika 的{}集合元素属性映射语法,你尝试的写法会在编译阶段直接抛出语法错误,无法正常生成映射实现类。

如果你要求不新增额外自定义方法,可以使用@Mapping的expression属性直接写Stream逻辑实现相同效果,示例如下:

// 全限定名写法,无需额外导入依赖
@Mapping(target = "innerItemIds", expression = "java(entity.getItems().stream().map(item -> item.getInnerItem().getId()).collect(java.util.stream.Collectors.toList()))")
SomeDto map(SomeEntity entity);

如果希望简化表达式写法,可以在你的Mapper类上通过@Mapper注解的imports属性导入用到的类,比如:

@Mapper(imports = {Collectors.class})
public interface SomeMapper {
    @Mapping(target = "innerItemIds", expression = "java(entity.getItems().stream().map(item -> item.getInnerItem().getId()).collect(Collectors.toList()))")
    SomeDto map(SomeEntity entity);
}

Java 16及以上版本可以直接用Stream的toList()方法进一步简化:

@Mapping(target = "innerItemIds", expression = "java(entity.getItems().stream().map(item -> item.getInnerItem().getId()).toList())")
SomeDto map(SomeEntity entity);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:15:07