【问题标题】:Non-trivial Dozer mappings非平凡的推土机映射
【发布时间】:2009-12-16 18:46:49
【问题描述】:

我正在努力让Dozer 屈服于我认为应该很简单的事情。我有两个类似的模型,我希望在它们之间进行映射,但是一个比另一个具有“更深”的层次结构,这在处理集合时给我带来了问题。考虑以下类:

源类:

class Foo {
    String id;
    NameGroup nameGroup; 
    // Setters/Getters
}

class NameGroup {
    private List<Name> names;
    // Setters/Getters
}

class Name {
    private String nameValue;
    // Setters/Getters
}

目标类:

class Bar {
    private String barId;
    private BarNames barNames;
    // Setters/Getters
}

class BarNames {
    private List<String> names;
    // Setters/Getters
}

现在我想要以下单向映射:

Foo.id -> Bar.barId // Simple enough

但我需要:

Foo.nameGroup.names.nameValue -> Bar.barNames.names

所以Foo.nameGroup.names 中的每个Name 实例都应该导致String 被添加到BarNames.names 列表中。这可能吗?

【问题讨论】:

    标签: java javabeans dozer


    【解决方案1】:

    只要您的“Name”类包含 String 构造函数,这可以通过 Dozer 轻松完成。

    来自 Dozer 文档 (http://dozer.sourceforge.net/documentation/simpleproperty.html) 的引用:

    执行数据类型转换 自动由推土机映射 引擎。目前,Dozer 支持 以下类型的转换:(这些 都是双向的)

    ...

    字符串到 复杂类型如果复杂类型 包含一个字符串构造函数

    ...

    我已经用你上面的类测试了这个(我遇到了同样的问题),它工作得很好。这是我使用的映射:

    <mapping>
      <class-a>com.test.bar.Bar</class-a>
      <class-b>com.test.foo.Foo</class-b>
      <field>
        <a>barId</a>
        <b>id</b>
      </field>
      <field>
        <a>barNames.names</a>
        <b>nameGroup.names</b>
        <a-deep-index-hint>java.lang.String</a-deep-index-hint>
        <b-deep-index-hint>com.test.foo.Name</b-deep-index-hint>
      </field>
    </mapping>
    

    【讨论】:

    • 谢谢@pjmyburg - 我会试试看的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多