Выделение пустой коллекции для json с использованием трикотажа - PullRequest
0 голосов
/ 21 ноября 2011

У меня странная проблема с маршалингом пустой коллекции объектов в json с использованием jersey с поддержкой json на основе jaxb.Мой объект выглядит как

...
@XmlWrapper(name = "stuff") @XmlElement(name = "s")
private List<Foo> foos;
...

Марширование этого в json дает ожидаемые результаты

... stuff: [{ "s": ... }, { "s": ... }] ...

, за исключением случаев, когда список пуст.Я ожидал увидеть

... stuff: [] ...

, но вместо этого вижу

... stuff: [null] ...

. Есть идеи, что не так? Проблема, похоже, связана с аннотацией @XmlElementWrapper, ее удаление Я вообще не получаю свойство stuff в выводе.

Ответы [ 3 ]

0 голосов
/ 24 ноября 2011

Я бы предложил использовать отображение POJO на основе Джексона. Я не уверен, зачем вам эти промежуточные "s", но POJO создаст (и потребит) более простую структуру:

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

Для этого вам не нужны аннотации с отображением POJO; Аннотации JAXB нужны только для обработки XML, поскольку у XML нет естественного механизма, позволяющего отличать массивы от объектов (в отличие от JSON).

0 голосов
/ 27 сентября 2012

Мне удалось решить "ошибку" массива JSON и примитивного поля в библиотеке json Джерси.Секретный компонент - магия JSONConfiguration и ContextResolver.См. Мой следующий пост, в котором приведен пример полного кода, настроенный ContextResolver и остальная часть Класс приложения может быть несколько нечеткой логикой на первый взгляд.

Как сериализовать примитивы Java с использованием Jersey REST

  • массив json для нулевых или одноэлементных списков Java
  • примитивные целочисленные или логические поля без кавычек
0 голосов
/ 21 ноября 2011

Сериализуете ли вы пустой список или сериализуете необъявленный нулевой объект?

т.е.Я бы ожидал:

private List<Foo> foos; - would serialize to 'stuff: [null]'

и я также ожидал бы:

private List<Foo> foos = new ArrayList<Foo>(); - we serialize to 'stuff: []'

Если это не так, вы всегда можете направить Джексона (который является сериализатором JSON по умолчанию в комплекте сДжерси) до опустить запись свойств бина в качестве нулевого значения. .

...