4

您如何将单个字段映射到推土机中的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

这个问题与此处发布的问题类似,希望我想将我的单个字段映射到列表中的每个项目。推土机:将单个字段映射到 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>
4

1 回答 1

3

Dozer 不支持这种类型的映射。为了进行这种类型的映射,您必须知道 Collection 上的索引(静态映射)。这是一个自定义转换器的工作,创建一个字符串到列表(DestBar)的转换器,如下所示:

public class YourConverter extends DozerConverter<String, List>

在转换器中实现映射逻辑(只需在需要的地方设置字符串 ID)并像这样配置你的推土机文件:

<mapping> 
     <class-a>SrcFoo</class-a> 
     <class-b>DestFoo</class-b> 
     ...
     <field custom-converter="yourpackage.YourConverter">
         <a>id</a>
         <b>destBars</b>
     </field> 
</mapping>
于 2012-08-06T16:41:47.477 回答