DOZERマッピングは初めてです
プロパティを複数のソースクラスから宛先にマップできますか?
例えば
class A {
int a;
int b;
}
class B {
String c;
}
class Destination {
int a;
int b;
String c;
}
1つのマッピング構成ファイルでこれを行うことは可能ですか?
2回だけマップできます。まず、Destination.classをターゲットとして使用し、次に最初のマッピングの結果であるオブジェクトをターゲットとして使用します。
One one = new One();
one.setA(1);
one.setB(2);
Two two = new Two();
two.setC("3");
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
Destination destination = mapper.map(one, Destination.class);
mapper.map(two, destination);
System.out.println(destination);
// Destination [a=1, b=2, c=3]
これは、空のマッピング構成ファイルでも機能します。
直接ではありません。2つのソースクラスをラップアラウンドする新しいクラスを作成し、そこからコピーする必要があります。
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>
または、既存のフィールドを空白にしないように注意しながら、各ソースクラスから宛先オブジェクトに1回ずつ、2回コピーする必要があります。
<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>