6

次のクラスがあるとします

public class Baz {
  private List<Foo> foos = new ArrayList<Foo>();
}

public class Foo {
  private String string;
}

public class Target {
  private List<String> fooStrings = new ArrayList<String>();
}

Bazを指定して、それをターゲットクラスにマップし、Bazのfooに含まれる文字列のリストを取得するために使用できるマッピングはありますか? 次のマッピングは機能しません

<mapping>
  <class-a>Baz</class-a>
  <class-b>Target</class-b>
  <field>
    <a>foos.string</a>
    <b>fooStrings</b>
  </field>
</mapping>

string は foos (リスト型) のプロパティではないためです。Dozer は、深いマッピングでコレクションに遭遇し、ターゲットもコレクションである場合、深いプロパティ名を 2 つに分割し、コレクション全体を反復処理して子部分を取得できるほど賢いと思っていたでしょう。コレクション メンバーからのディープ マッピングの。どうやらそうではありません。Dozer の機能リクエストを行う以外に解決策はありますか?

4

3 に答える 3

1

いつでも独自のCustomConverterを作成できます。

実行時にDozerにはタイプ情報がなく、リスト内のList foosすべてが実際にであることを保証できないため、Dozerがこれを期待どおりに処理できない理由は理にかなっています。ObjectFoo

于 2010-02-04T01:41:29.253 に答える
1

私は、あなたはそのようなマッピングを書くことができると思います

<mapping>
  <class-a>Baz</class-a>
  <class-b>Target</class-b>
  <field>
    <a>foos</a>
    <b>fooStrings</b>
  </field>
</mapping>

<custom-converters> 
  <converter type="CustomFooConverter">
    <class-a>
      Foo
    </class-a>
    <class-b>
      String
    </class-b>
  </converter>
</custom-converters>

また、foo の文字列フィールドを取得し、文字列として返す CustomFooConverter を実装します。

プリミティブへのマッピングをサポートする機能リクエストを投稿できると思います

<mapping>
  <class-a>Foo</class-a>
  <class-b>String</class-b>
  <field>
    <a>string</a>
  </field>
</mapping>

Dozer GitHubに

于 2013-01-09T14:47:15.407 に答える
0

カスタムコンバーターなしでできると思います。

以下のように Foo クラスの toString() メソッドをオーバーライドします。

@Override
public String toString(){
return this.getString(); //assuming string property has a getter method. if not,write this.string

そして今、次のマッピング:

<mapping>
<class-a>fully qualified name of Baz(with package name)</class-a>
<class-b>same for Target</class-b>
<field>
   <a>foos</a>
   <b>fooStrings</b>
   <a-hint>foo</a-hint>
   <b-hint>java.lang.String</b-hint>
</field>
</mapping>
于 2012-06-02T10:48:52.690 に答える