I\'ve been trying to create a Jersey REST Webservice. I want to receive and emit JSON objects from Java classes like the following:
@XmlRootElement
public cl
I don't know why this isn't the default setting, and it took me a while figuring it out, but if you want working JSON conversion with Jersey, add
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
to your web.xml and all your problems should be solved.
PS: you also need to get rid of the @XmlRootElement
annotations to make it work
I know it's been asked long time ago, but things changed mean time, so for the latest Jersey v2.22 that do not have anymore the package com.sun.jersey, these two dependencies added in the project pom.xml solved the same problem:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.5.4</version> <!-- jackson version used by jersey v2.22 -->
</dependency>
No need to add anything in web.xml. First dependency will instruct jersey to use jackson for POJO to JSON transformations. Second dependency will register jackson as jersey JSON provider.
Also for the null problem in POJO, add this annotation to the POJO class:
@JsonInclude(JsonInclude.Include.NON_NULL)
@POST
@Consumes("application/json")
public void createBook(Book book)
{
.....
.....
}
Of course you need to have getter/setter for every property in Book.
Also the reason as why it is recommended to use wrapper class (which is usually a map) is to avoid creating multiple DTOs for every kind of data you want to send. It is easier to just serialize/deserialize using a map and as part of business logic convert it to a corresponding POJO for internal processing particularly if you are using that POJO for object relational mapping.
You can use google-gson. Here is a sample code:
@Test
public void testGson(){
Book book = new Book();
book.code = "1234";
book.names = new HashMap<String,String>();
book.names.put("Manish", "Pandit");
book.names.put("Some","Name");
String json = new Gson().toJson(book);
System.out.println(json);
}
The output is {"code":"1234","names":{"Some":"Name","Manish":"Pandit"}}