How to input json request with Jersey and Jackson?
In this page you will see support for Json using Jersey and Jackson APIs. Jackson is is a multi-purpose Java library for
processing JSON data format. Jackson aims to be the best possible combination of fast, correct, lightweight, and ergonomic for
developers In this example we will send json as a input, and the json request will be mapped to Order object.
Here is the pom.xml file. You need jersey-json jar file.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>RestfulWebServices</groupId>
<artifactId>RestfulWebServices</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.17</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17</version>
</dependency>
</dependencies>
</project>
|
Web.xml file for your reference. In web.xml add “com.sun.jersey.api.json.POJOMappingFeature” as “init-param” which supports
Json object mapping.
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.java2novice.restful</param-value>
</init-param>
<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>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
|
Our model class Order is annotated with required jackson annoations to support json transformation:
package com.java2novice.model;
import org.codehaus.jackson.annotate.JsonProperty;
public class Order {
@JsonProperty
private String custmer;
private String address;
@JsonProperty("bill-amount")
private String amount;
public String getCustmer() {
return custmer;
}
public void setCustmer(String custmer) {
this.custmer = custmer;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
|
Remember that our restful web service API accepting json as an input, we should annotate our
service method with @Consumes and specify MIME type as application/jon. Closely watch our service method input parameter, it is of type
Order, before calling our service method, the json is mapped to Order object.
package com.java2novice.restful;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.java2novice.model.Order;
@POST
@Path("/order")
@Consumes(MediaType.APPLICATION_JSON)
public Response getUserById(Order inputOrder){
System.out.println("Received order from :"+inputOrder.getCustmer());
System.out.println("Order worth: "+inputOrder.getAmount());
System.out.println("Customer address: "+inputOrder.getAddress());
return Response.status(200).entity("Your order is in-progress").build();
}
}
|
Here is the json requst and response:

The console output:
|