13

Dozer を使用して、Document クラスと DocumentManagementBean クラスの間をマッピングしています。どちらも自分で作成したものです。両方とも、dateAdded と呼ばれる Joda DateTime タイプの getter と setter を持つプロパティを持っています。

ドキュメント オブジェクトdにプロパティdateAdded=xがある場合、mapper.map(d, DocumentManagementBean.class)すべてのフィールドの呼び出しが正しく自動マッピングされます (コード ベースを完全に制御できるため、dozer-config を使用せずにプロパティ名の一致に頼ることができます) dateAdded。新しい DocumentManagementBeandmbは、オブジェクトの x ではなく、そのプロパティに現在のDateTime が含まれます。dateAddedd

ドーザーが電話をかけようとすることを期待しています

dmb.setDateAdded(d.getDateAdded());

ソースからターゲットにdateAddedの値を持ってくるだけですが、dmbオブジェクトの新しいDateTimeを作成してそのままにしておくようです。

誰かが私のためにこれに光を当てることができますか?

4

5 に答える 5

16

基本的な問題は、Dozer が new DateTime() を介して DateTime の新しい空のインスタンスを作成することです。これにより、元の日付/時刻ではなく現在の日付/時刻になってしまいます。複数の解決策があるかもしれませんが、私は通常、グローバルに定義されたカスタムコンバーターを使用しました。

    <converter type="de.kba.resper.customconverter.DateTimeCustomConverter">
        <class-a>org.joda.time.DateTime</class-a>
        <class-b>org.joda.time.DateTime</class-b>
    </converter>

public class DateTimeCustomConverter extends DozerConverter<DateTime, DateTime> {

    public DateTimeCustomConverter() {
        super(DateTime.class, DateTime.class);
    }

    @Override
    public DateTime convertTo(final DateTime source, final DateTime destination) {

        if (source == null) {
            return null;
        }

        return new DateTime(source);
    }

    @Override
    public DateTime convertFrom(final DateTime source, final DateTime destination) {

        if (source == null) {
            return null;
        }

        return new DateTime(source);
        }

}

やり過ぎかもしれませんが(笑)

于 2012-08-23T08:51:49.087 に答える
14

おそらくもう必要ないでしょうが、Dozerは、少なくとも最新バージョン(現在、このバージョンは5.4.0)を使用して、参照によってオブジェクトをコピーする機会を提供します。参照によるコピーはあなたが探しているものです。

<field copy-by-reference="true">
  <a>copyByReference</a>
  <b>copyByReferencePrime</b>
</field>

ドキュメント:http ://dozer.sourceforge.net/documentation/copybyreference.html

于 2013-01-07T09:54:47.213 に答える
5

xml ファイルで参照渡しのグローバル プロパティを設定する

    <copy-by-references>
        <copy-by-reference>
            org.joda.time.LocalDate
        </copy-by-reference>
        <copy-by-reference>
            org.joda.time.LocalDateTime
        </copy-by-reference>
    </copy-by-references>
于 2014-09-26T13:57:21.280 に答える
0

それを行うことは可能ですが、いくつかの構成を追加する必要があります。

<field>
  <a set-method="placeValue" get-method="buildValue">value</a>
  <b>value</b>  
</field>

詳細はこちら: http://dozer.sourceforge.net/documentation/custommethods.html

注釈を使用して缶を作成する方法を知っている人はいますか?

于 2012-08-23T08:42:43.293 に答える