質問

私は得るのに苦労しています ドーザー 私が非常に単純であるべきだと思う何かのために私の意志に曲がること。間にマッピングしたい2つの同様のモデルがありますが、1つは他方よりも「より深い」階層があり、これはコレクションを扱うときに問題を引き起こしています。次のクラスを検討してください。

ソースクラス:

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

だからそれぞれ Name インスタンスイン Foo.nameGroup.names aの結果は必要ありません String に追加されます BarNames.names リスト。これは可能ですか?

役に立ちましたか?

解決

これは、「名前」クラスに文字列コンストラクターが含まれている限り、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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top