1

Autobeans はかなり強力です。それでも、私の人生では、ルートレベルの JSON マップまたはリストを処理する方法がわかりません。

ドキュメントのほとんどは、さまざまなサブオブジェクト (リストとマップを含む) を含むことができる定義済みの最上位オブジェクトがあることを示唆していますが、マップまたはリストの自動ビーン化に関するドキュメントはありません。

public interface Types {
    List<FieldType> getTypes();
}

public interface TypesAutoBeanFactory extends AutoBeanFactory {
    AutoBean<Types> jsonItems();
}

上記は、受信データが次のようになるリストを達成するための参考方法です。

{"types":[{...},{...}]}

それでも、これは見苦しいと思います。REST サービスは正しく返されるはずです。

[{...},{...}]

しかし、Autobean フレームワークでこれを処理する簡単な方法が見つかりません。ルートレベルのマップについても同様です。

なぜこれが機能しないのですか?代替手段はありますか:

public interface TypesAutoBeanFactory extends AutoBeanFactory {
    AutoBean<List<FieldType>> jsonItems();
}
4

3 に答える 3

0

AutoBean は、クラスgetsetメソッド (おそらくisメソッドも) をスキャンすることで機能します。 Listそれらのメソッドはありません。

内側の解析メソッドを外側のメソッドにList直接フックするパッチを作成できます。必要なコードのほとんどはそこにあります。多分あなたの代わりに追加することができます. 結果は、おそらく AutoBean ではなく、実際の List になります。decodeAutoBeanCodexdecode(Class type, Splittable input)decodeList(Splittable input)

于 2012-03-20T21:42:07.880 に答える
0

私が見ることができる別の簡単な方法は、完全に自動化されたソリューションではありません。

文字列が , で始まる場合は[{、それが配列であることは明らかなので、使用できます

Object[] array = jsonString.replaceAll("[\[\]]","").split(",");

次に、autobean を使用して配列の要素を操作します。

于 2013-09-18T11:45:05.763 に答える
0

あなたが説明した方法を使用して、単一のキーの下にリストを含む JSON ペイロードをデコードします。

この回答では、前述のアプローチをキーなしの JSON リスト ペイロードと組み合わせるために使用できる別の方法についても説明しています。

于 2013-11-22T16:02:38.827 に答える