如何用MapStruct将List<String>转换为含嵌套对象列表的DomainUpdate?
解决MapStruct中List转DomainUpdate的映射错误
你遇到的错误Can't generate mapping method from iterable type from java stdlib to non-iterable type,本质是MapStruct无法直接将List<String>(可迭代的标准库类型)映射到DomainUpdate(自定义的非可迭代对象)——它既不知道如何把整个列表包装成DomainUpdate实例,也不清楚如何将单个String转换为Domain对象。
解决方案
需要给MapStruct提供明确的转换规则,分两步处理:
定义单个String到Domain的基础映射
先告诉MapStruct如何把一个String转成Domain对象:Domain stringToDomain(String value);指定List
到DomainUpdate的映射逻辑
通过@Mapping注解,明确将输入的List<String>转换为List<Domain>后,赋值给DomainUpdate的domains属性。
完整Mapper代码
@Mapper(componentModel = "spring", collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) public interface DomainProtobufMapper { // 基础转换:String -> Domain Domain stringToDomain(String value); // 集合转包装对象:List<String> -> DomainUpdate @Mapping(target = "domains", source = ".") DomainUpdate domainsToProtobuf(List<String> domains); }
原理说明
- 有了单个
String到Domain的映射方法,MapStruct会自动生成List<String>到List<Domain>的转换逻辑。 @Mapping(target = "domains", source = ".")表示将方法的输入参数(即整个List<String>)转换后,赋值给DomainUpdate的domains属性。
内容的提问来源于stack exchange,提问作者Jaime Moncayo
相关产品推荐
相关产品推荐

