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

时间:2019-07-12 09:36:23

标签: spring mapstruct

假设我有以下课程:

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对象类型的映射器,使我获得一个包含所有信息的ADTO对象?我必须创建两个不同的映射器?只能在一个映射器中完成吗?我认为可能是以下情况,但我不知道如何从列表中映射属性:

@Mapper
public interface MyMapper {

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

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试一下(未经测试,但应该可以正常工作)

映射列表时,您应该同时为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);
}