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

如何用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提供明确的转换规则,分两步处理:

  1. 定义单个String到Domain的基础映射
    先告诉MapStruct如何把一个String转成Domain对象:

    Domain stringToDomain(String value);
    
  2. 指定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:42