首页 > 解决方案 > mapstruct - 在复杂对象上下文中可迭代到不可迭代

问题描述

我目前正面临 mapstruct 和它的初学者问题,其中之一是以下。

我知道样本提案:https ://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable

而且我通常知道要处理复杂的映射,但是我的头部映射确实受到了阻碍,例如:

    @Mapping(target = "employee.mainAddress.address", source = "employee.registeredAddresses[0].privateAddresses[0].address")
    abstract EmployeeDto map(Employee employee);

希望对象结构清晰。在源中有两个列表,每个列表都应该选择第一个元素。mapstruct如何做到这一点?

标签: javamapstruct

解决方案


只需自己指定一个映射方法。MapStruct 可以承担大部分映射代码的负担,但对于一些,您只需要提供一点帮助。这就是示例试图展示的内容。

@Mapper
public abstract class MyMapper{

    @Mapping(target = "employee.mainAddress.address", source = "employee.registeredAddresses")
    abstract EmployeeDto map(Employee employee);
 
    // implement a concrete method yourself that MapStruct can recognise and call in its generated code
    AddressDto map(List<PrivateAddress> source) {

     // perhaps do some NPE checking, call MapStruct generated method below
     return map( source.get(0).get(0) );
  }

  // continue letting MapStruct do the bulk of the work
  abstract AddressDto map(Address source);

}

推荐阅读