3

java.util.Mapから複合型にマップしたいので、それをAbcと呼びましょう。

<mapping>
  <class-a>java.util.Map</class-a>
  <class-b bean-factory="xyz.AbcBeanFactory" factory-bean-id="AbcBeanFactory">
    xyz.Abc
  </class-b>
  <field>
    <a>Name</a>
    <b>companyName</b>
  </field>
</mapping>

これにより、次のエラーが発生します(わかりやすい): org.dozer.MappingException:クラス(インターフェイスjava.util.Map)のフィールド(Name)の読み取りまたは書き込みメソッドが見つかりません

OK、キー「Name」のエントリを持つjava.util.Mapからマップするにはどうすればよいですか?そのjava.util.Mapを保持するラッパーオブジェクトを作成し、マップするマップ内の各エントリにゲッター/セッターを提供する必要がありますか?

4

1 に答える 1

4

マップのマッピングの詳細については、Dozerのドキュメントをご覧ください。プレーンフィールドではなくキーを提供する必要があります。次に例を示します。

クラスAbc:

package com.test;

public class Abc {
    private String companyName;
    private String companyAddress;

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getCompanyAddress() {
        return companyAddress;
    }

    public void setCompanyAddress(String companyAddress) {
        this.companyAddress = companyAddress;
    }
}

マッピングファイル:

<mapping>
    <class-a>java.util.Map</class-a>
    <class-b>com.test.Abc</class-b>
    <field>
        <a key="name">this</a>
        <b>companyName</b>
    </field>
    <field>
        <a key="address">this</a>
        <b>companyAddress</b>
    </field>
</mapping>

テストコード:

Map<String, String> map = new HashMap<String, String>();
map.put("name", "Company Inc.");
map.put("address", "XYZ Commercial Street");

Abc destObject =  dozerMapper.map(map, Abc.class);
于 2012-11-17T20:46:39.607 に答える