java - 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如何做到这一点?
解决方案
只需自己指定一个映射方法。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);
}
推荐阅读
- python - 如何根据查找数据框检查由字符串列表组成的数据框并执行计算?
- visual-studio - Visual Studio 为注释掉的代码抛出编译错误
- java - Show related text as the letter written in JTextfield
- html - 我可以通过CSS指定折线的点吗
- javascript - Firebase 云函数:onRequest 和 onCall 之间的区别
- c++ - 以支持继承的方式将 shared_ptr 添加到 self 到对象的构造函数中的向量
- rabbitmq - RabbitMQ 铲子卡在“终止”状态
- php - PHP/Oracle如何处理很多Selects
- php - 有条件地在数组初始值设定项中插入键值对
- cookies - 什么是名为 google_cid 的 cookie?