ModelMapper如何将根对象属性赋值给下属列表的每个元素
ModelMapper 嵌套列表属性同步映射配置方案
适用场景
RootDTO转Root时,需将RootDTO顶层的foo属性同步赋值给嵌套elements列表中所有Element实例的foo属性,同时保留原有隐式映射能力。
最终配置代码
import org.modelmapper.ModelMapper; public class MapperConfig { public static ModelMapper getModelMapper() { ModelMapper modelMapper = new ModelMapper(); // 保留ElementDTO到Element的原生隐式映射,无需额外配置 modelMapper.typeMap(ElementDTO.class, Element.class); // 配置RootDTO到Root的映射规则 modelMapper.typeMap(RootDTO.class, Root.class) // 启用默认隐式映射,自动匹配所有字段名相同的属性 .implicitMappings() // 追加后置映射逻辑,同步foo属性到嵌套列表 .addMapping((rootDTO, root) -> { if (rootDTO.getFoo() == null || root.getElements() == null) { return; } root.getElements().forEach(element -> element.setFoo(rootDTO.getFoo())); }); return modelMapper; } }
使用方式
仅需单次调用映射方法即可完成全部转换:
RootDTO rootDTO = // 待转换的源对象 Root root = MapperConfig.getModelMapper().map(rootDTO, Root.class);
方案合规性验证
- 新增属性无需修改映射代码:所有字段名匹配的属性依然走ModelMapper原生隐式映射逻辑,新增可匹配属性时不需要调整配置
- 仅单次调用完成映射:不需要额外的二次转换、后处理工具类调用,仅需调用一次
map方法
注意事项
该配置不会覆盖Element实例已映射的其他属性值,Element的bar属性依然会从对应ElementDTO自动映射,不受后置逻辑影响。
内容的提问来源于stack exchange,提问作者payne
相关产品推荐
相关产品推荐

