【问题标题】:Dozer: Map single field into a List推土机:将单个字段映射到列表中
【发布时间】:2012-06-29 13:16:31
【问题描述】:

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

我希望用SrcFoo.id 填充所有DestBar.fooId(DestBar 的整个列表)

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

【问题讨论】:

    标签: java dozer


    【解决方案1】:

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-30
      • 2016-09-13
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      相关资源
      最近更新 更多