Utilización de Jackson con objetos POJO (plain old Java™ objects)

Los servicios RESTful pueden consumir y producir contenido con el formato JSON (JavaScript Object Notation) con la biblioteca Jackson.

Acerca de esta tarea

Los tipos POJO (incluyendo los tipos de matriz y los tipos java.util.Collection) son tipos de entidad soportados por Jackson. La biblioteca Jackson se incluye en el entorno de ejecución de este producto. No es necesario que empaquetar las bibliotecas adicionales.

Las siguientes anotaciones Jackson están soportados y se pueden utilizar para la anotación de objetos POJO:
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

Estas anotaciones se pueden utilizar para un control más preciso sobre cómo se convierten los objetos POJO a y desde JSON.

Procedimiento

  1. Utilizar un objeto POJO como parámetro o tipo de retorno del método de recurso.
  2. Añada una anotación javax.ws.rs.core.Produces o javax.ws.rs.core.Consumes con el tipo de soporte de aplicación o JSON al método de recurso.

Resultados

Ha implementado un recurso que puede desclasificar y clasificar datos JSON de y hacia objetos POJO con Jackson.

Ejemplo

El ejemplo siguiente ilustra un recurso que se utiliza para devolver una recopilación de personas y para procesar un salido de una persona.
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;
    }

}
Al emitir una solicitud GET al recurso JacksonResource, se devuelve contenido JSON, como el siguiente fragmento de código, en la respuesta.
[{"firstName":"John","lastName":"Doe"},{"firstName":"Fred","lastName":"Thompson"}]
Al emitir una solicitud POST al recurso JacksonResource, se envía contenido JSON, como el siguiente fragmento de código, en la solicitud y se almacena en el objeto Person.
{"firstName":"John","lastName":"Doe"}
JSON content, like the following code snippet, is returned in the response.
{"greeting":"Hello John Doe"}