【问题标题】:MapStruct List<String> to Single Object with Nested List of ObjectsMapStruct List<String> 到具有嵌套对象列表的单个对象
【发布时间】:2023-01-11 02:18:35
【问题描述】:
我正在尝试将 List<String> 转换为以下 DomainUpdate 对象。 DomainUpdate 对象包含一个域列表,而一个域只有一个字符串值。
DomainUpdate{
List<Domain> domains;
}
Domain{
String value;
}
我似乎找不到任何关于如何执行此操作的好文档,而我当前的实现只是抱怨:
error: Can't generate mapping method from iterable type from java stdlib to non-iterable type.
映射器
@Mapper(componentModel = "spring", collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
public interface DomainProtobufMapper {
DomainUpdate domainsToProtobuf(List<String> domains);
}
【问题讨论】:
标签:
java
spring
mapstruct
【解决方案1】:
你不能直接匹配它,但让我们用你想要的返回类型和你需要转换的参数创建你的自定义方法。
@Mapper
public interface MyMapper {
default DomainUpdate domainsToProtobuf(List<String> values) {
DomainUpdate domainUpdate = new DomainUpdate();
domainUpdate.setDomains(valueToDomain(values));
return domainUpdate;
}
Domain valueToDomain(String value);
List<Domain> valueToDomain(List<String> values);
}
OR
您可以使用 in this article. 之类的虚拟参数来完成
@Mapper
public interface MyMapper {
default DomainUpdate domainsToProtobuf(List<String> values) {
return domainsToProtobuf(null, values);
}
@Mapping(target = "domains", source = "values")
DomainUpdate domainsToProtobuf(Integer dummy, List<String> values);
Domain valueToDomain(String value);
List<Domain> valueToDomain(List<String> values);
}