[英]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.