推土机:将单个字段映射到列表中

时间:2012-06-29 13:16:31

标签: java dozer

如何将单个字段映射到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>

1 个答案:

答案 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>