6

私のサーバーは JSON でオブジェクトのリストを返します。たとえば、 Cats またはDogs などです。

Catそれらがすべてs になることがわかっている場合は、AutoBeanCodexを簡単に機能するように設定できます。種類がわからないのですが…どうすればいいですか?

すべてのエンティティに type フィールドを与えることもできますが、その場合、各エンティティを に渡す前に解析する必要がAutoBeanCodexあります。他にどのようなオプションがありますか?

4

1 に答える 1

8

先日これで遊んで、メソッドなどを試しながら数時間格闘しましたが、@Categoryこれが見つかりました: Splittable/リスト/マップ。私の場合、設計時にワイヤを通過するエンベロープ型を知っており、他のプロパティに基づいて、他のフィールドを任意の数の他の autobean にすることができます。

コンパイル時に他の Bean のタイプを知る必要さえありませんSplittable

interface Envelope {
  String getStatus();
  String getDataType();
  Splittable getData();
}

(データを受信するだけでなく送信する場合は、セッターが必要になる場合があります-Beanを `Splittableにエンコードしてエンベロープで送信する方が、デコードするよりも簡単です)

ネットワーク経由で送信された JSON は (おそらく を使用してAutoBeanCodex)タイプにデコードされEnvelope、メソッドから出力される必要があるタイプを決定したらgetData()、次のようなものを呼び出して、ネストされたオブジェクトを取り出します。

SpecificNestedBean bean = AutoBeanCodex.decode(factory, 
                                               SpecificNestedBean.class, 
                                               env.getData()).as();

Envelope型とネストされた型 (上記factory) は、同じ型である必要さえありませんAutoBeanFactory。これにより、一般的なトランスポート インスタンスからエンベロープの読み取り/書き込みを抽象化し、各dataType文字列プロパティに特定のファクトリを使用してデータのモデル (およびネストされたモデル) をデコードできます。

于 2012-02-10T21:40:05.297 に答える