编程语言
首页 > 编程语言> > java – Dozer:将单个字段映射到List

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