5

2 番目のパラメーターがorMap<String, Object>であると予想される階層からマップする必要があるプロジェクトに取り組んでいます。これまでのところ、ModelMapper はうまく機能していますが、特定の変換に問題があります。次の場合、は単なるマーカー インターフェイスです。StringMap<String, Object>Model

class Client implements Model {
    String firstName;
    String lastName;
    List<Organization> organizations = new ArrayList<>();
}

Organization私のマーカーインターフェイスを実装すると仮定しますModelが、それ以外は任意に構造化されているため、次のものを にマップできるようにしたいと思いますClient

Map source = new HashMap(){{
    put("firstName", "John"),
    put("lastName", "Smith"),
    put("organizations", new HashMap(){{
        put("0", new HashMap(){{
            put("id", "1234");
        }});
        put("abc", new HashMap(){{
            put("id", "5678");
        }});
    }});
}};

要約すると、組織のプロパティにプッシュするときに、ModelMapper にマップ キーをドロップさせ、値リストのみを使用させるにはどうすればよいでしょうか。これに失敗すると、組織のプロパティは空になります。私がこれをしたいのには十分な理由があり、悪い例があると思うかもしれません!

ご意見をお寄せいただきありがとうございます。

編集

a から aへのConverter変換を管理するa を構築しようとしましたが、役に立ちませんでした。与えられた:MapCollection<Model>

new Converter<Map, Collection<DataTransportObject>>() {
    @Override
    public Set convert(MappingContext<Map, Collection<DataTransportObject>> context) {
        LOG.debug("Here");
        Set<DataTransportObject> result = new HashSet<>();
        return result;
    }
}

これには 2 つの問題があります。

  1. どうやら ModelMapper は継承を見ていないため、の実装がMapソースとして与えられた場合、コンバーターは実行されません。たとえば、ソースとしてHashMapa を受け入れて渡すようにコンバーターを変更すると、機能します。HashMap
  2. context.getGenericDestinationType()一般的な情報を持たない戻り値ListまたはSetクラス。では、ModelMapper は通常の状況で複雑なモデル グラフをどのように構築するのでしょうか?
4

1 に答える 1

0

あなたの場合、Pojo クラスに追加のセッターを使用できると思います。そして、マップをオブジェクトに変換するには、ライブラリを ObjectMapper/BeanUtils/... として使用します。例えば:

void setOranizations(Map<String, Organization> map) {
    this.organizations = map.values();
}
于 2014-11-28T20:38:44.227 に答える