MapStruct:从具有复杂对象列表的对象进行映射

MapStruct: mapping from object with a list of complex object

假设我有以下 类:

public class A {
private String id;
private List<B> related;
}

public class B {
private String id;
private String name;
}

public class ADTO {
private String id;
private List<BDTO> relations;
}

public class BDTO {
private String identificator;
private String relatedName;
}

如何创建一个映射器,给定一个 A 对象类型 returns 我一个包含所有信息的 ADTO 对象?我必须创建两个不同的映射器?可以只在一个映射器中完成吗?我认为它会像下面这样,但我不知道如何从列表中映射属性:

@Mapper
public interface MyMapper {

    @Mappings({ @Mapping(source = "related", target = "relations") })
    ADTO mapperA(A obj);
}

提前致谢。

试试这个(未经测试但应该可以正常工作)

当您映射列表时,您应该为 class 元素和列表创建映射以映射列表的所有元素)

@Mapper
public interface MyMapper {

    @Mappings({ @Mapping(source = "related", target = "relations") })
    ADTO mapperA(A obj);

    @Mappings(
      { @Mapping(source = "id", target = "identificator") },
      { @Mapping(source = "name", target = "relatedName") })
    BDTO bDTOMapping(B b);

    List<BDTO> bDTOListMapping(List<B> bList);
}