Как вы можете использовать GWT AutoBeans для анализа сообщения JSON, когда некоторые из возвращаемых значений могут быть объектом или набором объектов?

Можно ли проанализировать сообщение JSON с помощью GWT AutoBeans, когда один из возвращаемых объектов может быть коллекцией, но не всегда?

Например, если у меня есть сообщение 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 ответ

Решение

Если у тебя есть ListAutoBeans ожидает массив JSON. Этот массив может содержать ноль, один или несколько элементов, но он должен быть массивом (или отсутствовать).

Я думаю, что вы можете сделать свой getBooks метод вернуть Splittable хоть. Вы могли бы тогда знать, является ли это массивом (isIndexed()) или нет. Если вам нужно, чтобы массив содержал объекты, вам нужно будет выполнить итерацию по массиву (size() а также get(int)) и передать каждый элемент AutoBeanCodex.decode() декодировать их (или напрямую передать разделяемую таблицу, если это не массив).

Другие вопросы по тегам