Рассмотрим пример REST-сервиса для работы с Json. Для того, чтобы Jersey мог работать с json необходимо добавить зависимость:
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>1.8</version> </dependency>
Теперь необходимо в web.xml
указать необходимость маппинга pojo-классов на json. Добавляем следующий параметр в сервлет jersey:
<init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param>
Целиком web.xml
выглядит так:
<?xml version="1.0" encoding="UTF-8"?> <web-app 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_3_0.xsd" version="3.0"> <servlet> <servlet-name>jersey-servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>ru.mydesignstio.jaxrs</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-servlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
Теперь определим класс, который, который будем сериализовать в Json:
package ru.mydesignstio.jaxrs.model; public class Person { private String name; private String id; public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", id='" + id + '\'' + '}'; } }
И, собственно, класс сервиса:
package ru.mydesignstio.jaxrs.service; import ru.mydesignstio.jaxrs.model.Person; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/person") public class PersonService { @GET @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Person getPerson( @PathParam("id") String id){ Person person = new Person(); person.setName("MyDesignStudio"); person.setId(id); return person; } @POST @Consumes("application/json") public String setPerson(Person person) { return person.toString(); } }
У сервиса два метода – один возвращает объект в виде json:
@GET @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Person getPerson( @PathParam("id") String id){ Person person = new Person(); person.setName("MyDesignStudio"); person.setId(id); return person; }
Другой принимает POST-запрос с json-объектом и возвращает его строковое представление:
@POST @Consumes("application/json") public String setPerson(Person person) { return person.toString(); }
Обратимся с GET-запросом к сервису:

А теперь отправим результат GET-запроса в виде POST-запроса в сервис с помощью IntelliJ IDEA REST Client:

Здесь важно указать Content-Type: application/json
, иначе будет следующая ошибка:
SEVERE: A message body reader for Java class ru.mydesignstio.jaxrs.model.Person, and Java type class ru.mydesignstio.jaxrs.model.Person, and MIME media type */*; charset=UTF-8 was not found. The registered message body readers compatible with the MIME media type are: */*; charset=UTF-8 -> com.sun.jersey.core.impl.provider.entity.FormProvider ...
Ответ сервера:
