I have an object that I'd like to serve in JSON as a RESTful resource. I have Jersey's JSON POJO support turned on like so (in web.xml):
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
But when I try to access the resource, I get this exception:
SEVERE: A message body writer for Java type, class com.example.MyDto, and MIME media type, application/json, was not found
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException
...
The class that I'm trying to serve isn't complicated, all it's got are some public final fields and a constructor that sets all of them. The fields are all strings, primitives, classes similar to this one, or Lists thereof (I've tried using plain Lists instead of generic List<T>s, to no avail). Does anyone know what gives? Thanks!
Java EE 6
Jersey 1.1.5
GlassFish 3.0.1
I'm new to this but I was able to use POJOs after adding the jackson-all-1.9.0.jar to the classpath.
The following worked for me. I'm using Jersey 2.7 with Jackson with Apache Felix (OSGi) running on Tomcat6.
And then, in your
web.xml
(or in my case, just aHashtable
), you would specify yourjavax.ws.rs.Application
like soNo need to specify
com.sun.jersey.config.property.pacakges
orcom.sun.jersey.api.json.POJOMappingFeature
Just make sure you specify dependency on
Moving
jersey-json
dependency to the top of the pom.xml solved this problem for me.You can use
@XmlRootElement
if you want to use JAXB annotations (see other answers).However, if you prefer pure POJO mapping, you must do the following (Unfortunately it isn't written in docs):
com.sun.jersey.config.property.packages
init parameter, addorg.codehaus.jackson.jaxrs
to the list. This will include JSON providers in the scan list of Jersey.I followed the instructions here which show how to use Jersey and Jackson POJOs(as opposed to JAXB). It worked with Jersey 1.12 as well.
Jersey 2.0 provides support for JSON using MOXy an Jackson.
MOXy support is enabled by default if the JAR exists in the classpath and Jackson support can be enabled using a Feature. This is all explained in detail in Jersey 2.0 User Guide chapter on JSON Binding:
https://jersey.java.net/documentation/latest/media.html#json
To add MOXy support without the need for configuration add the following dependency to you maven
pom.xml