Java MapStruct集合映射

时间:2017-10-18 09:47:28

标签: java mapstruct

我有这样的映射:

@Mappings({ 
    @Mapping(target = "....", source = "..."),
    @Mapping(target = "....", source = "..."),
    @Mapping(target = "server", source = "server") // Added for clarity
})
MyDTOClass mapMyEntity(MyEntityClass myEntityClass, Server server);
List<MyDTOClass> mapMyEntity(List<MyEntityClass> myEntityClass, Server server);

当我从数据库中检索数据时,我得到了一个实体列表。我需要将相同的Server对象实例映射到列表中的所有DTO实例。

MapStruct期待List<Server>在这个用例中是多余的。

这是我想要的伪代码:

Server server = ....;
List<MyDTOClass> myDTOClassList = new ArrayList<MyDTOClass>();
for(MyEntityClass myEntityClass:List<MyEntityClass>)
{
    MyDTOClass myDTOClass = new myDTOClass();
    //My standard mappings
    myDTOClass.setXXX(myEntityClass.getXXX());
    ...
    ...
    //My special mapping applicable for all objects in list
    myDTOClass.setServer(server);
    myDTOClassList.add(myDTOClass);
}

如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用1.2中的新@Context来实现此目的。和@AfterMapping

@Mapper
public interface MyMapper {


    MyDTOClass mapMyEntity(MyEntityClass myEntityClass, @Context Server server);

    List<MyDTOClass> mapMyEntity(List<MyEntityClass> myEntityClass, @Context Server server);

    @AfterMapping
    default void afterMapping(@MappingTarget MyDTOClass target, @Context Server server) {
        target.setServer(server);
    }
}