我有一组复杂的Data对象,它们在我的过程中的不同时间点被填充,然后需要Map到其他对象。我使用mapstruct和@MappingTarget
注解是为了避免每次我需要添加或修改一些属性时都重新创建我的对象的新示例,但现在我面临一个问题。
我有一个类似的代码结构:
第一个
然后是我的Map:
第一个
我在void fillList(@MappingTarget A a, List<D> ds);
行上遇到错误:“无法生成从可迭代类型到不可迭代类型的Map方法。".
如果我删除@MappingTarget
注解,我就不会再遇到任何问题,但我必须将返回类型更改为A。
我不明白为什么在使用注解时会出现这个错误。有人知道为什么吗?有没有办法保留注解,以便在每次调用Map器时不会示例化新的A
对象?
1条答案
按热度按时间b4wnujal1#
原因
Mapstruct认为您需要将
iterable
Map到non-iterable
。不支持此操作。
解决方法
解决方法是引入一个未使用的变量。
只要有一个以上的值,mapstruct就会假设这些是要在
@MappingTarget
中设置的属性,而不是要Map到它的属性。对mapstruct的改进
mapstruct的一个增强功能是支持这种情况,方法是在给出此错误之前,首先检查该字段是否可直接分配给同名的属性,或者是否通过
@Mapping
Map。您可以在Mapstruct github issues页面检查是否已经存在问题以获得此支持。如果没有,请随意创建。