2017-10-18 195 views
-1

我有一個這樣的映射:的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); 

當我從數據庫中檢索數據,我得到實體的名單。我需要將同一個服務器對象實例映射到列表中的所有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); 
} 

如何才能實現這一目標?

+0

你的問題不是很清楚。你究竟想要映射什麼? 'List '從哪裏來? – Filip

+0

我的基本映射是MyDTOClass mapMyEntity,我想擴展到一個集合中。但將同一個服務器對象附加到列表的所有實例。我添加了僞代碼。希望現在清楚。 – user1880957

回答

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); 
    } 
}