GWT Autobeans, анализирующий корневой уровень как Карта или Список - PullRequest
1 голос
/ 21 марта 2012

Автобин довольно мощный.Тем не менее, на всю жизнь, я не могу понять, как обращаться с картами или списками JSON корневого уровня.

В большей части документации предполагается, что у вас есть определенный объект верхнего уровня, который может содержать множество подуровней.объектов (включая списки и карты), но нет документации по автоматическому отображению карты или списка.

public interface Types {
    List<FieldType> getTypes();
}

public interface TypesAutoBeanFactory extends AutoBeanFactory {
    AutoBean<Types> jsonItems();
}

Выше приведен ссылочный способ создания списков, где входящие данные будут выглядеть так:

{"types":[{...},{...}]}

Тем не менее, я нахожу это уродливым, и служба REST должна правильно вернуть:

[{...},{...}]

, но я не могу найти простой способ справиться с этим с помощью инфраструктуры Autobean.То же самое касается карт корневого уровня.

Почему это не работает и есть альтернатива:

public interface TypesAutoBeanFactory extends AutoBeanFactory {
    AutoBean<List<FieldType>> jsonItems();
}

Ответы [ 3 ]

0 голосов
/ 18 сентября 2013

Другой простой способ, который я вижу, - это не полностью автоматическое решение.

Очевидно, что если строка начинается с [{, то это массив, поэтому мы можем использовать

Object[] array = jsonString.replaceAll("[\[\]]","").split(",");

, а затем просто работать с элементами массива с помощью autobean.

0 голосов
/ 22 ноября 2013

Я использую описанный вами метод для декодирования полезных нагрузок JSON, содержащих список под одним ключом.

В этом ответе также объясняется другой метод, который вы могли бы использовать, чтобы объединить упомянутый вами подход с полезными нагрузками JSON-списка без ключей.

0 голосов
/ 21 марта 2012

AutoBean работает путем сканирования вашего класса на наличие методов get и set (возможно, также is).List не имеет этих методов.

Вы можете написать патч для привязки внутренних List методов синтаксического анализа непосредственно к внешним decode методам AutoBeanCodex - большая часть кода, который вам нужентам.Может быть, вместо decode(Class type, Splittable input) вы могли бы просто добавить decodeList(Splittable input).Результатом, вероятно, будет действительный список вместо AutoBean.

...