Spring Boot @MappingTarget生成“无法生成从可迭代类型到不可迭代类型的Map方法,”错误

pu82cl6c  于 2022-11-29  发布在  Spring
关注(0)|答案(1)|浏览(585)

我有一组复杂的Data对象,它们在我的过程中的不同时间点被填充,然后需要Map到其他对象。我使用mapstruct和@MappingTarget注解是为了避免每次我需要添加或修改一些属性时都重新创建我的对象的新示例,但现在我面临一个问题。
我有一个类似的代码结构:
第一个
然后是我的Map:
第一个

我在void fillList(@MappingTarget A a, List<D> ds);行上遇到错误:“无法生成从可迭代类型到不可迭代类型的Map方法。".

如果我删除@MappingTarget注解,我就不会再遇到任何问题,但我必须将返回类型更改为A。
我不明白为什么在使用注解时会出现这个错误。有人知道为什么吗?有没有办法保留注解,以便在每次调用Map器时不会示例化新的A对象?

b4wnujal

b4wnujal1#

原因

Mapstruct认为您需要将iterableMap到non-iterable
不支持此操作。

解决方法

解决方法是引入一个未使用的变量。
只要有一个以上的值,mapstruct就会假设这些是要在@MappingTarget中设置的属性,而不是要Map到它的属性。

default void fillList(A a, List<D> ds) {
        fillList(a, ds, false);
    }

    @Mapping(target="namesC", source="ds")
    void fillList(@MappingTarget A a, List<D> ds, boolean unused);

对mapstruct的改进

mapstruct的一个增强功能是支持这种情况,方法是在给出此错误之前,首先检查该字段是否可直接分配给同名的属性,或者是否通过@MappingMap。
您可以在Mapstruct github issues页面检查是否已经存在问题以获得此支持。如果没有,请随意创建。

相关问题