推土机 - 将类字段映射到平面表示

时间:2012-09-27 14:57:06

标签: dozer

我一直在谷歌搜索和尝试不同的推土机配置选项,但到目前为止找不到一个简单的解决方案...... 问题如下:

class A {
 String test;
 B test2;
}
class B {
 String test3;
 String test4;
}

class C {
 String test;
 String test3;
 String test4;
}

现在我想将A(包括B)中的所有字段映射到C中的平面表示。 是否可以使用配置映射它?问题是我需要在许多不同的类中映射B,我不想为每个类编写这样的映射:

<mapping>
    <class-a>A</class-a>
    <class-b>C</class-b>
    <field>
        <a>test2.test3</a>
        <b>test3</b>
    </field>
    <field>
        <a>test2.test4</a>
        <b>test4</b>
    </field>
</mapping>

希望得到解决方案:)

2 个答案:

答案 0 :(得分:1)

在dozer faq上找到:

我可以将一个字段映射到另一个嵌套在目标对象深层n层的字段吗?

是。 Dozer支持嵌套字段的点表示法。与其他推土机场映射一样,这些都是双向的。

<field>
  <a>someNestedObj.someOtherNestedObj.someField</a>
  <b>someOtherField</b>
</field>

dozer FAQ

答案 1 :(得分:1)

诀窍是使用映射ID和“this”。您只需要定义一次caseB并重复使用它。

<mapping map-id="caseB">
    <class-a>B</class-a>
    <class-b>C</class-b>
    <field>
        <a>test3</a>
        <b>test3</b>
    </field>
    <field>
        <a>test4</a>
        <b>test4</b>
    </field>
</mapping>
<mapping>
    <class-a>A</class-a>
    <class-b>C</class-b>
    <field map-id="caseB">
        <a>test2</a>
        <b>this</b>
    </field>
</mapping>