如何将单个字段映射到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>
答案 0 :(得分:3)
Dozer不支持这种类型的映射。为了进行这种类型的映射,您必须知道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>