如何使用MapStruct实现List<Integer>到List<CustomObject>的映射
MapStruct 对象映射实现方案
核心实现逻辑
自定义单个Integer到CustomObject的转换方法,MapStruct会自动识别该方法完成List<Integer>到List<CustomObject>的批量转换,无需手动编写循环逻辑。
完整Mapper代码
import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Named; // 若需要Spring容器托管Mapper,添加componentModel = "spring"配置,不需要可删除 @Mapper(componentModel = "spring") public interface SourceTargetMapper { // 字段映射绑定:将源对象ids字段转换为目标对象myObjects字段,使用指定的转换方法 @Mapping(source = "ids", target = "myObjects", qualifiedByName = "idToCustomObject") TargetDto sourceToTarget(SourceDto sourceDto); // 自定义id转CustomObject的逻辑 @Named("idToCustomObject") default CustomObject idToCustomObject(Integer id) { CustomObject obj = new CustomObject(); obj.setId(id); // 按外部API要求初始化name、slug为空字符串 obj.setName(""); obj.setSlug(""); return obj; } }
适配场景说明
- 如果
CustomObject是Java 16+的record不可变类型,转换方法可简化为:default CustomObject idToCustomObject(Integer id) { return new CustomObject(id, "", ""); } - 若需要在
ids为null时默认返回空列表,可在映射注解添加默认值配置:@Mapping(source = "ids", target = "myObjects", qualifiedByName = "idToCustomObject", defaultExpression = "java(new java.util.ArrayList<>())")
内容的提问来源于stack exchange,提问作者tufac2
相关产品推荐
相关产品推荐

