在复杂对象上下文中可迭代到不可迭代



我目前面临的是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如何做到这一点?

只需自己指定一个Mapping方法即可。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);
}

最新更新