2

空の文字列を持つ宛先オブジェクトのStringプロパティをDozerで初期化する必要があります。

これらのオブジェクトを想像してみてください。

SRC
public class Container {
            private String animalName;  
....
DEST
public class Animal {
    private String name;
    private String type;

ContainerからAnimalに初期化し、typeプロパティをnullではなく""に設定する必要があります。

私が見つけた唯一の方法は、次のようにカスタムコンバーターを作成することです。

public class InitializeStringConverter extends DozerConverter<Container, String>{

    public InitializeStringConverter() {
        super(Container.class, String.class);
    }

    @Override
    public Container convertFrom(String arg0, Container arg1) {
        return null;
    }

    @Override
    public String convertTo(Container arg0, String arg1) {
        return "";
    }
}

そしてこのマッピングを持っている:

<mapping>
        <class-a>it.alten.sample.mapping.Container</class-a>
        <class-b>it.alten.sample.mapping.Animal</class-b>
        <field custom-converter="it.alten.sample.mapping.converter.InitializeStringConverter">
            <a>this</a>
            <b>type</b>
        </field>
        <!-- 
        <field>
            <a>animalName</a>
            <b>name</b>
        </field>
         -->
        <field>
            <a>animalType</a>
            <b>type</b>
        </field>
    </mapping>

このタスクを実行するためのより簡潔な方法はありますか?

マッシモよろしくお願いします

4

1 に答える 1

1

Dozerは値をコピーして変換しますが、私が思うようにカスタムの方法でフィールドを初期化するべきではありません。

あなたの問題に対する私の解決策:

  1. クラスまたはフィールドのnullマッピングを有効にする-docs
  2. 次のように、nullではなく空の値でフィールドを初期化するsetterを作成します。

    void setType(String type) {this.type = (type != null ? type : "");}

null制御はセッターの機能であり、正しいので、問題のより明確な解決策だと思います。

于 2012-11-15T10:28:19.217 に答える