Utilisation de Jackson avec des objets Java™ simples (POJO)
Les service RESTful peuvent consommer et produire du contenu en utilisant le format JSON (JavaScript Object Notation) avec la bibliothèque Jackson.
Pourquoi et quand exécuter cette tâche
Les types d'objet Java simple POJO (notamment les types tableau et les types java.util.Collection) sont des types d'entité pris en charge par Jackson. La bibliothèque Jackson est incluse dans l'environnement d'exécution de ce produit. Aucune bibliothèque supplémentaire n'est nécessaire.
Les
annotations Jackson suivantes sont prises en charge et peuvent être utilisées pour les objets Java simples
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
Ces annotations peuvent être utilisées pour contrôler plus précisément la conversion des objets POJO de et vers JSON.
Procédure
- Utilisez un objet POJO comme paramètre ou type de retour pour la méthode de ressource.
- Ajoutez une annotation javax.ws.rs.core.Produces ou javax.ws.rs.core.Consumes avec l'application ou le type de support JSON à la méthode de ressource.
Résultats
Vous avez implémenté une ressource qui peut déconvertir et convertir les données JSON de et vers les objets POJO avec Jackson.
Exemple
L'exemple suivant illustre une ressource utilisée pour renvoyer une
liste de personnes et pour traiter un message d'accueil pour une
personne.
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;
}
}
Lorsque vous émettez une demande HTTP GET vers la ressource JacksonResource,
le contenu JSON, tel que le fragment de code suivant, est renvoyé
dans la réponse.
[{"firstName":"John","lastName":"Doe"},{"firstName":"Fred","lastName":"Thompson"}]
Lorsque
vous émettez une demande POST vers la ressource JacksonResource, le contenu JSON, tel que le fragment de code suivant,
est renvoyé dans la demande et stocké dans l'objet de personne.
{"firstName":"John","lastName":"Doe"}
JSON content, like the following code snippet, is returned in the response.
{"greeting":"Hello John Doe"}