Spring MVC can be setup to automatically bind incoming JSON string into a Java object. Firstly, ensure you have jackson-mapper-asl included on the classpath:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
Assuming the JSON string we want to bind represent a person object like this:
{
name: "Gerry",
age: 20,
city: "Sydney"
}
Which will be bound into following Java class:
public class Person {
private String name;
private int age;
private String city;
// getters & setters ...
}
Declare the Spring MVC controller handler method like below. The handler method is mapped into path “addPerson” with method POST.
@RequestMapping(value = "/addPerson",
method = RequestMethod.POST,
headers = {"Content-type=application/json"})
@ResponseBody
public JsonResponse addPerson(@RequestBody Person person) {
logger.debug(person.toString());
return new JsonResponse("OK","");
}
Also pay attention to @ResponseBody and the returned JsonResponse object. Here JsonResponse is a class to return the result of the addPerson operation.
public class JsonResponse { private String status = "";
private String errorMessage = ""; public JsonResponse(String status, String errorMessage) {
this.status = status;
this.errorMessage = errorMessage;
}
}
When converted to JSON this will look like this:
{
status : "OK",
errorMessage : ""
}
Below is an example jQuery based javascript handler that posts into the above Spring MVC handler and observe the returned value:
$.ajax({
type: "POST",
url: "addPerson",
data: JSON.stringify({ name: "Gerry", age: 20, city: "Sydney" }),
contentType: 'application/json',
success: function(data) {
if(data.status == 'OK') alert('Person has been added');
else alert('Failed adding person: ' + data.status + ', ' + data.errorMessage);
}
});