Client JAX-RS avec Jersey
1. Vue d'ensemble
Jersey est un framework open source pour le développement de services Web RESTFul. Il possède également de grandes capacités client intégrées.
Dans ce rapide tutoriel, nous explorerons la création du client JAX-RS à l'aide deJersey 2.
Pour une discussion sur la création de services Web RESTful à l'aide de Jersey, veuillez vous référer àthis article.
Lectures complémentaires:
API REST avec Jersey et Spring
Création de services Web reposants à l’aide de Jersey 2 et Spring.
CORS dans JAX-RS
Apprenez à implémenter le mécanisme de partage de ressources inter-origines (CORS) dans les applications basées sur JAX-RS.
Filtres Jersey et intercepteurs
Examinez le fonctionnement des filtres et des intercepteurs dans la structure Jersey.
2. Dépendances Maven
Commençons par ajouter les dépendances requises (pour le client Jersey JAX-RS) dans lespom.xml:
org.glassfish.jersey.core
jersey-client
2.25.1
Pour utiliser Jackson 2.x en tant que fournisseur JSON:
org.glassfish.jersey.media
jersey-media-json-jackson
2.25.1
La dernière version de ces dépendances peut être trouvée dansjersey-client etjersey-media-json-jackson.
3. Client RESTFul à Jersey
Nous développerons un client JAX-RS pour consommer les API REST JSON et XML que nous avons développéeshere (nous devons nous assurer que le service est déployé et que l'URL est accessible).
3.1. Classe de représentation des ressources
Jetons un coup d'œil à la classe de représentation des ressources:
@XmlRootElement
public class Employee {
private int id;
private String firstName;
// standard getters and setters
}
Les annotations JAXB telles que@XmlRootElement ne sont requises que si la prise en charge XML est nécessaire.
3.2. Créer une instance d'unClient
La première chose dont nous avons besoin est une instance deClient:
Client client = ClientBuilder.newClient();
3.3. Créer unWebTarget
Une fois que nous avons l'instanceClient, nous pouvons créer unWebTarget en utilisant l'URI de la ressource Web ciblée:
WebTarget webTarget
= client.target("http://localhost:8082/spring-jersey");
En utilisantWebTarget, nous pouvons définir un chemin vers une ressource spécifique:
WebTarget employeeWebTarget
= webTarget.path("resources/employees");
3.4. Construire un appel de requête HTTP
Une instance de générateur d'appel est créée dans l'une des méthodesWebTarget.request():
Invocation.Builder invocationBuilder
= employeeWebTarget.request(MediaType.APPLICATION_JSON);
Pour le format XML,MediaType.APPLICATION_XML peut être utilisé.
3.5. Appel de requêtes HTTP
Invoquer HTTP GET:
Response response
= invocationBuilder.get(Employee.class);
Invoquer HTTP POST:
Response response
= invocationBuilder
.post(Entity.entity(employee, MediaType.APPLICATION_JSON);
3.6. Exemple de client REST
Commençons à écrire un client REST simple. La méthodegetJsonEmployee() récupère un objetEmployee basé sur l'employéid. Le JSON retourné par lesREST Web Service est désérialisé en objetEmployee avant de retourner.
En utilisant l'API JAX-RS couramment pour créer une cible Web, un générateur d'invocation et une requête HTTP GET:
public class RestClient {
private static final String REST_URI
= "http://localhost:8082/spring-jersey/resources/employees";
private Client client = ClientBuilder.newClient();
public Employee getJsonEmployee(int id) {
return client
.target(REST_URI)
.path(String.valueOf(id))
.request(MediaType.APPLICATION_JSON)
.get(Employee.class);
}
//...
}
Ajoutons maintenant une méthode pour la requête HTTP POST. La méthodecreateJsonEmployee() crée unEmployee en invoquant leREST Web Service pour la création deEmployee. L'API client sérialise en interne l'objetEmployee en JSON avant d'appeler la méthode HTTP POST:
public Response createJsonEmployee(Employee emp) {
return client
.target(REST_URI)
.request(MediaType.APPLICATION_JSON)
.post(Entity.entity(emp, MediaType.APPLICATION_JSON));
}
4. Tester le client
Testons notre client avec JUnit:
public class JerseyClientLiveTest {
public static final int HTTP_CREATED = 201;
private RestClient client = new RestClient();
@Test
public void givenCorrectObject_whenCorrectJsonRequest_thenResponseCodeCreated() {
Employee emp = new Employee(6, "Johny");
Response response = client.createJsonEmployee(emp);
assertEquals(response.getStatus(), HTTP_CREATED);
}
}
5. Conclusion
Dans cet article, nous avons présenté le client JAX-RS à l’aide de Jersey 2 et développé un simple client Java RESTFul.
Comme toujours, le code source complet est disponible enthis Github project.