Usando o Jackson com Plain Old Java™ Objects (POJOs)
Os serviços RESTful podem consumir e produzir um conteúdo com o formato JavaScript Object Notation (JSON) com a biblioteca Jackson.
Sobre Esta Tarefa
Os tipos de POJO (incluindo tipos de matrizes e tipos java.util.Collection) são tipos de entidade suportadas pelo Jackson. A biblioteca Jackson está incluída no ambiente de tempo de execução desse produto. Não é necessário inserir quaisquer bibliotecas adicionais em pacotes configuráveis.
As seguintes anotações Jackson são suportadas
e podem ser usadas para POJOs de anotação:
org.codehaus.jackson.annotate.JsonAnySetter
org.codehaus.jackson.annotate.JsonAutoDetect
org.codehaus.jackson.annotate.JsonClass
org.codehaus.jackson.annotate.JsonContentClass
org.codehaus.jackson.annotate.JsonCreator
org.codehaus.jackson.annotate.JsonGetter
org.codehaus.jackson.annotate.JsonIgnore
org.codehaus.jackson.annotate.JsonIgnoreProperties
org.codehaus.jackson.annotate.JsonKeyClass
org.codehaus.jackson.annotate.JsonProperty
org.codehaus.jackson.annotate.JsonPropertyOrder
org.codehaus.jackson.annotate.JsonSetter
org.codehaus.jackson.annotate.JsonSubTypes
org.codehaus.jackson.annotate.JsonSubTypes.Type
org.codehaus.jackson.annotate.JsonTypeInfo
org.codehaus.jackson.annotate.JsonTypeName
org.codehaus.jackson.annotate.JsonValue
org.codehaus.jackson.annotate.JsonWriteNullProperties
org.codehaus.jackson.map.annotate.JsonCachable
org.codehaus.jackson.map.annotate.JsonDeserialize
org.codehaus.jackson.map.annotate.JsonSerialize
org.codehaus.jackson.map.annotate.JsonTypeIdResolver
org.codehaus.jackson.map.annotate.JsonTypeResolver
org.codehaus.jackson.map.annotate.JsonView
Essas anotações podem ser usadas para obter maior controle de baixa granularidade sobre como os POJOs são convertidos para e do JSON.
Procedimento
- Use um POJO como um parâmetro ou tipo de retorno para seu método de recurso.
- Inclua uma anotação javax.ws.rs.core.Produces ou javax.ws.rs.core.Consumes com o aplicativo ou tipo de mídia JSON para seu método de recurso.
Resultados
Um recurso foi implementado que pode desserializar e serializar os dados JSON para e dos POJOs com o Jackson.
Exemplo
O seguinte exemplo ilustra um recurso que é usado para retornar uma
coleção de pessoas e para processar uma saudação para uma pessoa.
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
public class Greeting {
private String greeting;
public String getGreeting() {
return this.greeting;
}
public void setGreeting(String greeting) {
this.greeting = greeting;
}
}
import java.util.List;
import java.util.ArrayList;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/people")
public class JacksonResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Person> getPersonList() {
List<Person> personArray = new ArrayList<Person>();
Person firstPerson = new Person();
firstPerson.setFirstName("John");
firstPerson.setLastName(“Doe”);
personArray.add(firstPerson);
Person secondPerson = new Person();
secondPerson.setFirstName(“Fred”);
secondPerson.setLastName("Thompson");
personArray.add(secondPerson);
return personArray;
}
@Path("/greet")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Greeting createGreetingForPerson(Person person) {
String name = person.getFirstName() + “ “ + person.getLastName();
Greeting greeting = new Greeting();
greeting.setGreeting(“Hello “ + name);
return greeting;
}
}
Quando emitir uma solicitação GET para o recurso JacksonResource, um
conteúdo JSON, como o seguinte fragmento de código, é retornado na resposta.
[{"firstName":"John","lastName":"Doe"},{"firstName":"Fred","lastName":"Thompson"}]
Quando emitir uma solicitação POST para o recurso JacksonResource, um
conteúdo JSON, como o seguinte fragmento de código, é enviado para a solicitação e armazenado em um objeto Pessoa.
{"firstName":"John","lastName":"Doe"}
JSON content, like the following code snippet, is returned in the response.
{"greeting":"Hello John Doe"}