Как легко использовать Джексона для Джерси
Я хочу использовать Джерси для реализации некоторых сервисов REST Java. По умолчанию конвертер POJO JAXB обрабатывает объекты JSON немного странно, поэтому я хочу использовать Jackson для конвертации POJO с небольшими или меньшими накладными расходами. Как я могу описать структуру J2ME для использования другого конвертера?
Мой web.xml выглядит следующим образом:
<!-- Jersey JAVA REST implementation -->
<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.foobar.rest.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Ответы
Ответ 1
просто добавьте JARs Jackson и измените web.xml следующим образом:
<!-- Jersey JAVA REST implementation -->
<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.foobar.rest.services;org.codehaus.jackson.jaxrs</param-value> <!-- use jackson for JSON -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Необходимые JARs Джексона (http://jackson.codehaus.org/):
jackson-core-asl-1.9.10.jar
jackson-core-lgpl-1.9.10.jar
jackson-jaxrs-1.9.10.jar
jackson-mapper-asl-1.9.10.jar
jackson-mapper-lgpl-1.9.10.jar
jackson-mrbean-1.9.10.jar
jackson-smile-1.9.10.jar
jackson-xc-1.9.10.jar
Ответ 2
В дополнение к регистрации провайдера Jackson 1.x вы можете использовать провайдера Jackson 2.x JSON (с базой данных Jackson 2.x и базовым модулем): https://github.com/FasterXML/jackson-jaxrs-json-provider
Он автоматически регистрирует себя с помощью интерфейса поставщика услуг (1.x не делал этого, так как он боялся, что пользователи могут быть удивлены этим, поскольку он основан на существовании jar в classpath вместо явного выбора).
EDIT (сентябрь 2013 г.): Как отметил @koppor, этот модуль устарел, а заменяющие (JSON, XML, Smile) можно найти из https://github.com/FasterXML/jackson-jaxrs-providers (спасибо!)