我是DOZER制图的新手
我们可以将多个源类的属性映射到目标吗?
EG
class A {
int a;
int b;
}
class B {
String c;
}
class Destination {
int a;
int b;
String c;
}
是否可以使用一个映射配置文件执行此操作?
答案 0 :(得分:11)
你可以只映射两次。首先,使用Destination.class作为目标,然后使用第一个映射产生的Object作为目标:
A a = new A();
a.setA(1);
a.setB(2);
B b = new B();
b.setC("3");
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
Destination destination = mapper.map(a, Destination.class);
mapper.map(b, destination);
System.out.println(destination);
// Destination [a=1, b=2, c=3]
这甚至适用于空映射配置文件。
答案 1 :(得分:3)
不是直接没有。您需要创建一个新类来包装您的两个源类并从中复制:
class D {
private A a;
private B b;
}
<mapping>
<class-a>D</class-a>
<class-b>C</class-b>
<field>
<a>a.a</a>
<b>a</b>
</field>
<field>
<a>a.b</a>
<b>b</b>
</field>
<field>
<a>b.c</a>
<b>c</b>
</field>
</mapping>
或者您需要复制两次,每次从每个源类复制到目标对象,确保不要删除现有字段。
<mapping wildcard="false">
<class-a>A</class-a>
<class-b>C/class-b>
<field>
<a>a</a>
<b>a</b>
</field>
<field>
<a>b</a>
<b>b</b>
</field>
</mapping>
<mapping wildcard="false">
<class-a>B</class-a>
<class-b>C/class-b>
<field>
<a>c</a>
<b>c</b>
</field>
</mapping>