Getting Jersey 2.x POJO JSON support to work with Jetty Getting Jersey 2.x POJO JSON support to work with Jetty json json

Getting Jersey 2.x POJO JSON support to work with Jetty


Automatic registration of providers by moxy didn't work as stated by Jersey Reference.

As per what they have stated, only moxy and jackson has POJO to JSON conversion feature.

Documentation says Jackson doesn't auto register(Not a problem any way!)

1. Swap Moxy with Jackson in POM.XML

Remove :

<dependency> <groupId>org.glassfish.jersey.media</groupId>  <artifactId>jersey-media-moxy</artifactId>  <version>${jersey.version}</version></dependency>

Add:

<dependency>  <groupId>org.glassfish.jersey.media</groupId>  <artifactId>jersey-media-json-jackson</artifactId>  <version>${jersey.version}</version></dependency>

2. Register Jackson Message Body Readers and Writers :

Add org.codehaus.jackson.jaxrs to provider packages list. Here is my web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet>    <servlet-name>Web app name</servlet-name>    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    <init-param>        <param-name>jersey.config.server.provider.packages</param-name>        <param-value>com.myorg.myproj.api;org.codehaus.jackson.jaxrs</param-value>    </init-param>    <load-on-startup>1</load-on-startup></servlet><servlet-mapping>    <servlet-name>Web app name</servlet-name>    <url-pattern>/v1/*</url-pattern></servlet-mapping>


P.S.
I am not promoting jackson, just that moxy didn't work for me, its writers failed to auto register as they advertised and could not find documentation about manual registration!


If using Jackson Implementation

As per the Jersey Documentation - Note that there is a difference in namespaces between Jackson 1.x (org.codehaus.jackson) and Jackson 2.x (com.fasterxml.jackson).

If you are using jackson 2.x, you need to register com.fasterxml.jackson.jaxrs as init param to the ServletContainer in your web.xml as follows:

<servlet>    <servlet-name>RESTServlet</servlet-name>    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    <init-param>        <param-name>jersey.config.server.provider.packages</param-name>        <param-value>com.fasterxml.jackson.jaxrs</param-value>    </init-param>    <init-param>        <param-name>jersey.config.server.provider.classnames</param-name>        <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>    </init-param>    <load-on-startup>1</load-on-startup></servlet>