的Java MapStruct集合映射
问题描述:
我有一个这样的映射:的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);
}
如何才能实现这一目标?
答
您可以使用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);
}
}
你的问题不是很清楚。你究竟想要映射什么? 'List'从哪里来? –
Filip
我的基本映射是MyDTOClass mapMyEntity,我想扩展到一个集合中。但将同一个服务器对象附加到列表的所有实例。我添加了伪代码。希望现在清楚。 – user1880957