Как вы можете использовать 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 ответ
Если у тебя есть List
AutoBeans ожидает массив JSON. Этот массив может содержать ноль, один или несколько элементов, но он должен быть массивом (или отсутствовать).
Я думаю, что вы можете сделать свой getBooks
метод вернуть Splittable
хоть. Вы могли бы тогда знать, является ли это массивом (isIndexed()
) или нет. Если вам нужно, чтобы массив содержал объекты, вам нужно будет выполнить итерацию по массиву (size()
а также get(int)
) и передать каждый элемент AutoBeanCodex.decode()
декодировать их (или напрямую передать разделяемую таблицу, если это не массив).