2

2 つの JavaBean 構造をマップしようとしています (ここでは簡略化):

package foo;
public class Container {
    private List<Item> items;
    public List<Item> getItems() { return items; }
    public void setItems(List<Item> items) { this.items = items; }
}

public class Item {
    private String message;
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

さらに、パッケージ内に同じプロパティを持つ等しい Bean がありbar、2 つの間のマッピングを次のように行います。

ModelMapper mapper = new ModelMapper();
bar.Container barContainer = mapper.map(fooContainer, bar.Container.class);

ここで、ソースfooContainerには項目のリストが含まれており、その中にはプロパティが a にmessage設定されているものと、プロパティ値として設定されてStringいるものがありnullます。

マッピングの結果で、のリストがリストにfoo.Item正しくマッピングされているように見えbar.Item、最初のmessageプロパティも正しくマッピングされていることがわかりました。ただし、プロパティのnull値を持つ最初のアイテムの後、ソース プロパティの内容に関係なく、後続のアイテムのmessageすべてのプロパティ値がマップされます。messagenull

デバッグで理由がわかりました: 宛先プロパティ値がnullメッセージ プロパティ パスになると、MappingEngineImpl:207 で影付きとしてマークされ、MappingEngineImpl:142 の後続の項目では無視されます。

これは moddelmapper のバグですか、それとも Bean プロパティのリストのマッピングを有効にするために別の方法で modelmapper を構成する必要がありますか?

4

1 に答える 1

2

私には間違いなくバグのように見えます。私は実際に ModelMapper を自分で使用したときにまったく同じ問題に遭遇しました。これが、この質問を見つけた方法です。

同じコンテキストが他のオブジェクトのマッピングに使用されるため、null のシェーディング パスは危険に見えます。この機能を削除しましたが、期待どおりに動作するようです。

このバグに関する ModelMapper ページで問題を作成しました: http://code.google.com/p/modelmapper/issues/detail?id=19

また、問題を修正して GitHub に投稿しました。プル リクエストを作成しました。ModelMapper の次のバージョンに組み込まれることを願っています: https://github.com/chrisdail/modelmapper

于 2012-07-19T11:10:38.113 に答える