Как обрабатывать динамические данные JSON с GWT Autobeans? - PullRequest
2 голосов
/ 03 марта 2012

В настоящее время у меня есть настройка класса, которая будет обрабатываться как autobean:

public interface Asset extends Hit {
    String getGuid();
    String getHitType();
    Map<String,Serializable> getMetadata();
}

Я пытался использовать Object вместо Serializable:

Map<String,Object>  getMetadata()

, но, похоже, он взрывается при попыткедля доступа к данным (потому что они не 'reified').

Карта метаданных может содержать другие карты, строки, целые и т. д. Как получить данные из внутренней карты этого объекта метаданных?

В настоящее время, если я вызываю asset.getMetadata (). Get ("title");это возвращает SerializableAutoBean и выполнение toString () или String.valueOf (obj) для этого объекта возвращает информацию об объекте в памяти, а не фактическое строковое значение.

Может ли объект AutoBean быть таким динамическим, или вы специальнодолжны определить каждое поле?

1 Ответ

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

AutoBeans не являются «динамическими» в смысле обобщений Java или в смысле RTTI.

В GWT все типы должны быть известны во время компиляции для всего, что генерируется автоматически (включая AutoBeans).Это накладывает ограничения на ваши проекты, которые не позволяют вам в полной мере использовать языковые функции Java (в частности, дженерики и другие функции RTTI).Таким образом, AutoBeans не являются динамическими в общем смысле RTTI или Java.Однако AutoBeans - это просто низкоуровневый способ упаковки ваших данных, и вы по-прежнему имеете доступ к данным с помощью Splittables!

Как указано в предыдущих комментариях, вы можете использовать Splittables для частей вашего JSON.объект, тип которого неизвестен во время сериализации / декодирования.Конечно, было бы неплохо, чтобы все происходило одновременно, но ничто не мешает вам выполнить некоторую постобработку ваших объектов данных, чтобы привести их в нужное вам состояние.

Действительно хороший способ для "Grok" понять, что происходит с AutoBeans (и всем остальным, что генерируется автоматически), - посмотреть на полученный сгенерированный код.Местоположение по умолчанию для maven: ${project.build.directory}/.generated.

Если вы посмотрите там после компиляции, вы должны найти код, который GWT-компилятор создает для ваших AutoBeans.

...