2016-03-01 30 views
1

名字我試圖用推土機在Java中兩個bean映射,並有以下情形:地圖名字,姓氏在一個bean來在其他

CustomerA具有firstName和lastName

public Class CustomerA { 
    public String firstName; 
    public String lastName; 
    ... 
    // Getters and Setters 
} 

CustomerB有名字,這需要映射到firstName+" "+lastName

public Class CustomerB { 
    public String name; 
    ... 
    // Getters and Setters 
} 

是否有可能使用推土機實現此目的?映射文件將如何顯示?我有一個自定義轉換器如下:

public class NameConvertor { 
    public Object convert(Object destination, Object source, Class destClass, Class sourceClass) { 
     Object retValue = null; 
     if (source == null) { 
      return null; 
     } 
     if (source instanceof CustomerA) { 
      CustomerA src = (CustomerA) source; 
      CustomerB dest = (CustomerB) destination; 
      if (destination == null) { 
       dest = new CustomerB(); 
      } 
      dest.setName(src.getFirstName()+" "+src.getLastName()); 
      retValue = dest; 
     } else if (source instanceof CustomerB) { 
      CustomerB src = (CustomerB) source; 
      CustomerA dest = (CustomerA) destination; 
      if (destination == null) { 
       dest = new CustomerA(); 
      } 
      dest.setFirstName(src.getName().split(" ")[0]); 
      dest.setLastName(src.getName().split(" ")[1]); 
      retValue = dest; 
     } 
     return retValue; 
    } 
} 
+0

你的映射文件是什麼樣的?請參閱http://dozer.sourceforge.net/documentation/customconverter.html – HankCa

回答

0

如何將多個字段映射到單個字段?

推土機目前不支持此功能。而且由於實施它的複雜性,這個功能目前不在路線圖上。一個可能的解決方案是將多個字段包裝在自定義複雜類型中,然後定義一個自定義轉換器以在複雜類型和單個字段之間進行映射。這樣,您可以處理將三個字段映射到自定義轉換器中的單個字段所需的自定義邏輯。

來源: http://dozer.sourceforge.net/documentation/faq.html#mult-fields-to-single-field

此外,我建議在這裏看http://www.tikalk.com/advanced-dozer-mappings/

0

你可以通過「這個」(你的一個實例)到一個自定義轉換器,將兩者連接起來場一起,返回它們映射到目的地。

所以,在你的映射你有這樣的事情:

<mapping> 
    <class-a>path.to.CustomerA</class-a> 
    <class-b>path.to.CustomerB</class-b> 
    <field custom-converter="NameConverter" type="one-way"> 
    <a>this</a> 
    <b>name</b> 
    </field> 
</mapping> 

然後在你的轉換器,你將有這樣的事情:

CustomerA customerA = (CustomerA) source; 
StringBuilder builder = new StringBuilder(); 
builder.append(customerA.getFirstName()); 
builder.append(customerA.getLastName()); 
return builder.toString(); 

我有一些示例代碼進行測試,並將其映射如預期。請讓我知道這對你有沒有用!

相關問題