私のサーバーは JSON でオブジェクトのリストを返します。たとえば、 Cat
s またはDog
s などです。
Cat
それらがすべてs になることがわかっている場合は、AutoBeanCodex
を簡単に機能するように設定できます。種類がわからないのですが…どうすればいいですか?
すべてのエンティティに type フィールドを与えることもできますが、その場合、各エンティティを に渡す前に解析する必要がAutoBeanCodex
あります。他にどのようなオプションがありますか?
先日これで遊んで、メソッドなどを試しながら数時間格闘しましたが、@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
文字列プロパティに特定のファクトリを使用してデータのモデル (およびネストされたモデル) をデコードできます。