【问题标题】:Java MapStruct Collection MappingJava MapStruct 集合映射
【发布时间】:2018-03-30 03:45:31
【问题描述】:

我有这样的映射:

@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&lt;Server&gt; 在这个用例中有点多余。

这是我想要的伪代码:

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

如何做到这一点?

【问题讨论】:

  • 你的问题不是很清楚。你到底想映射什么? List&lt;Server&gt; 来自哪里?
  • 我的基本映射是 MyDTOClass mapMyEntity,我想将它扩展到一个集合中。但是将相同的服务器对象附加到列表的所有实例。我添加了伪代码。希望现在清楚了。

标签: java mapstruct


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2021-02-14
    • 2018-01-30
    • 2021-12-18
    • 2016-07-23
    • 2014-01-10
    • 2021-05-18
    相关资源
    最近更新 更多