Джексон с Джаксбом - PullRequest
       26

Джексон с Джаксбом

3 голосов
/ 14 мая 2011

при использовании процессора Джексона JSON на Джерси, когда и зачем мне нужно использовать JAXB аннотации между ними?Object->JAXB->JSON

Джексон также предоставляет собственного JAX-RS провайдера для прямой Object->JSON.что не хватает в этом подходе?или почему я предпочитаю над другим

пс: я использую также пружину

Ответы [ 2 ]

10 голосов
/ 14 мая 2011

Для генерации JSON вам просто нужно указать @Produces(MediaType.APPLICATION_JSON).Однако по умолчанию будет выбран маршрут JAXB.

С помощью Object -> JAXB -> JSON вам нужно будет пометить классы, которые вы хотите отобразить, с помощью @XmlRootElement.Это будет работать нормально, но как только вы доберетесь до сериализации HashMap, вы не получите в итоге очевидное {keyOne:"one",keyTwo:"two"}, а скорее нечто странное, например {entry:[{key:"keyOne",value:"one"},{key:"keyTwo",value:"two"}]}.

Итак, чтобы взять прямой объект -> JSONКстати, просто укажите в своем файле web.xml следующее:

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

С этим отображением JSON будет работать так, как вы ожидаете.Только не забудьте удалить аннотации @XmlRootElement, они заставляют генерировать XML при включенном отображении POJO.

Также взгляните на мой вопрос относительно этого: Java.util.Map to JSONОбъект с Джерси / JAXB / Джексоном

Ссылка: http://jersey.java.net/nonav/documentation/latest/json.html#d4e894

2 голосов
/ 15 мая 2011

Вам нужно использовать аннотации JAXB только в том случае, если вы также хотите создавать / потреблять данные в виде XML.

Если вы просто заботитесь о JSON, не используйте аннотации JAXB;нет ничего, что они предлагают сверх аннотаций Джексона.Фактически, в большинстве случаев базовые случаи могут обрабатываться без каких-либо аннотаций с использованием соглашений об именах Java Bean.

...