0

返されたオブジェクトの 1 つがコレクションである可能性があるが常にそうではない場合、GWT AutoBeans を使用して JSON メッセージを解析することは可能ですか?

たとえば、著者とその関連著作を返す JSON メッセージがある場合、返される本が 0 個以上ある可能性があります。

{ "name" : "William Gibson", "books" : { bookname : "Neuromancer" } }

1つの応答である可能性がありますが、これも可能です:

{ "name" : "William Gibson", "books" : [ { bookname: "Neuromancer"}, { bookname : "Pattern Recognition" } ] }

AutoBean でのマーシャリングに使用するインターフェイスでこれをモデル化しようとすると、返される本が 1 つだけの場合、「索引付けされたデータを予期しています」というエラーが発生します。

AutoBean のインターフェース:

public interface Author {
  @PropertyName(value="name")
  String getAuthorName();
  @PropertyName(value="book")
  List<String> getBooks();
}

エラーのスニペット:

java.lang.AssertionError: Expecting indexed data
at com.google.web.bindery.autobean.shared.impl.SplittableList.<init>(SplittableList.java:64)

これは AutoBeans では不可能ですか?

(注: GWT 2.5.0 GA を使用)

4

1 に答える 1

1

がある場合List、AutoBeans は JSON 配列を期待します。その配列には、ゼロ、1 つ、または複数の要素を含めることができますが、配列である (または存在しない) 必要があります。

getBooksメソッドに a を返すようにできると思いますSplittable。これで、それが配列 ( ) であるかどうかを知ることができisIndexed()ます。配列にオブジェクトを含める必要がある場合は、配列 ( size()and get(int)) を反復処理し、各要素を に渡しAutoBeanCodex.decode()てデコードする必要があります (配列でない場合は分割テーブルを直接渡す)。

于 2012-11-28T15:11:13.377 に答える