簡體   English   中英

推土機:將單個字段映射到列表中

[英]Dozer: Map single field into a 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 (整個DestBar.fooId列表)都使用SrcFoo.id填充

這個問題與此處發布的問題類似,我希望將單個字段映射到列表中的每個項目。 推土機:將單個字段映射到設置

我嘗試了以下操作,但DestBar.fooIdDestBar.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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM