0

当返回的对象之一可能是集合但并非总是如此时,是否可以使用 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)

4

1 回答 1

1

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

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

于 2012-11-28T15:11:13.377 回答