[英]Map firstName, lastName in one bean to name in another
我正在嘗試使用Dozer在Java中映射兩個bean,並且具有以下情形:
客戶A具有名字和姓氏
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;
}
}
您可以將“ this”(您的A的實例)傳遞到自定義轉換器中,將兩個字段連接在一起,然后將它們返回以映射到目標。
因此,在映射中您將具有以下內容:
<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();
我用一些示例代碼進行了測試,並按預期進行了映射。 請讓我知道這對你有沒有用!
如何將多個字段映射到單個字段?
推土機目前不支持此功能。 而且由於實施它的復雜性,該功能目前尚不在路線圖上。 一種可能的解決方案是將多個字段包裝為自定義復雜類型,然后定義一個自定義轉換器,以在復雜類型和單個字段之間進行映射。 這樣,您可以處理將三個字段映射到自定義轉換器中的單個字段所需的自定義邏輯。
來源: http : //dozer.sourceforge.net/documentation/faq.html#mult-fields-to-single-field
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.