java – Dozer:将单个字段映射到List
作者:互联网
如何将单个字段映射到Dozer中的List / Collection?
class SrcFoo {
private String id;
private List<SrcBar> bars;
}
class SrcBar {
private String name;
}
这是我的目标对象:
class DestFoo {
private List<DestBar> destBars;
}
class DestBar {
private String fooId; // Populated by SrcFoo.id
private String barName;
}
我希望所有DestBar.fooId(整个DestBars列表)都使用SrcFoo.id填充
这个问题与此处发布的问题类似,我希望将单个字段映射到列表中的每个项目. Dozer: map single field to Set
我尝试了以下操作,但它只为DestBar.fooId填充了列表中的第一项.
<mapping>
<class-a>SrcFoo</class-a>
<class-b>DestFoo</class-b>
<field>
<a>bars</a>
<b>destBars</b>
</field>
<field>
<a>id</a>
<b>destBars.fooId</b> <!-- same affect as destBars[0].fooId ? -->
</field>
</mapping>
解决方法:
推土机不支持这种类型的映射.为了进行这种类型的映射,您必须知道Collection上的索引(静态映射).
这是一个自定义转换器的Job,创建一个String to List(of DestBar)的转换器,如下所示:
public class YourConverter extends DozerConverter<String, List>
在转换器中实现映射逻辑(只需在需要时设置String Id)并配置您的dozer文件,如下所示:
<mapping>
<class-a>SrcFoo</class-a>
<class-b>DestFoo</class-b>
...
<field custom-converter="yourpackage.YourConverter">
<a>id</a>
<b>destBars</b>
</field>
</mapping>
标签:java,dozer 来源: https://codeday.me/bug/20190630/1332908.html