同じJSONプロパティに対して3つの異なる型を返すサードパーティ製のAPIを使用しています。私はこれらのオブジェクトをデシリアライズするための最善の方法をJackson(好ましくはRetrofit)を使用して理解しようとしています。プロパティの複数の型を持つJSONの逆シリアル化
簡略化した例:このAPIから顧客レコードを取得するとき、応答はのいずれかであるかもしれない:
お客様が複数の電話番号を持っています。顧客が1つの電話番号を有する
PhoneObjects
{ "Phones": { "PhoneObject":[ {"number":"800 555 6666","type":"Home"}, {"number":"800 555 4444","type":"Work"} ] } }
の配列を返します。単一
PhoneObject
{ "Phones": { "PhoneObject": {"number":"800 555 6666","type":"Home"} }, }
お客様が何の電話番号を持っていない返します。空の文字列(!)
{ "Phones": { "PhoneObject":"" } }
現在返し、私は例えば、Map<String, Object>
にジャクソンとデシリアライズし、それが何であるかのタイプを決定するためにObject
を検査し、その後にそれを挿入することによって、これを処理しますList<PhoneObject>
(オブジェクトが存在しない場合は空のListを返します)。しかし、これは扱いにくく、これらのオブジェクトを逆シリアル化するためのよりクリーンな方法を探したいと考えています。
正常な応答を返すためにAPIを修正するよう依頼できますか? – SLaks
私はそれが最良の解決策になることに同意します。残念ながら、これはこの場合のオプションではありません。 – Rob