当某些返回值可能是对象或对象集合时,如何使用GWT AutoBeans来解析JSON消息?

时间:2012-11-28 14:53:28

标签: json parsing gwt autobean

当返回的其中一个对象可能是一个集合但不总是这样时,是否可以使用GWT AutoBeans解析JSON消息?

例如,如果我有一条返回作者及其相关着作的JSON消息,则可能会返回零件或多件书籍。

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

可能是一个回应,但也可以这样:

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

当我尝试使用用于使用AutoBean进行编组的接口对此进行建模时,如果只返回一本书,则会出现“期望索引数据”错误。

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)

1 个答案:

答案 0 :(得分:1)

如果您有List,AutoBeans需要一个JSON数组。该数组可以包含零个,一个或多个元素,但它必须是一个数组(或不存在)。

我认为您可以让getBooks方法返回Splittable。然后,您可以知道它是否是一个数组(isIndexed())。如果您需要数组包含对象,则必须迭代数组(size()get(int))并将每个元素传递给AutoBeanCodex.decode()以对其进行解码(或直接如果它不是数组,则传递splittable。

相关问题