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 d'excellentes capacités client intégrées.

Dans ce tutoriel rapide, nous explorerons la création du client JAX-RS à l'aide de Jersey 2.

Pour une discussion sur la création de services Web RESTful à l'aide de Jersey, veuillez consulter cet article.

2. Dépendances de Maven

Commençons par ajouter les dépendances requises (pour le client Jersey JAX-RS) dans le pom.xml :

 org.glassfish.jersey.core jersey-client 2.25.1 

Pour utiliser Jackson 2.x comme fournisseur JSON:

 org.glassfish.jersey.media jersey-media-json-jackson 2.25.1 

La dernière version de ces dépendances se trouve sur jersey-client et jersey-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ées ici (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'un client

La première chose dont nous avons besoin est une instance d'un client :

Client client = ClientBuilder.newClient();

3.3. Créer un WebTarget

Une fois que nous avons l' instance Client , nous pouvons créer un WebTarget en utilisant l'URI de la ressource Web ciblée:

WebTarget webTarget = client.target("//localhost:8082/spring-jersey");

En utilisant WebTarget , 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éthodes WebTarget.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

Appel de HTTP GET:

Response response = invocationBuilder.get(Employee.class);

Appel de HTTP POST:

Response response = invocationBuilder .post(Entity.entity(employee, MediaType.APPLICATION_JSON);

3.6. Exemple de client REST

Commençons par écrire un client REST simple. La méthode getJsonEmployee () récupère un objet Employee en fonction de l' ID de l'employé . Le JSON renvoyé par le service Web REST est désérialisé vers l' objet Employee avant d'être renvoyé.

Utilisation courante de l'API JAX-RS pour créer une cible Web, appeler le générateur et appeler une requête HTTP GET:

public class RestClient { private static final String REST_URI = "//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éthode createJsonEmployee () crée un employé en appelant le service Web REST pour la création d' employé . L'API client sérialise en interne l' objet Employee 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. Test du 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 utilisant Jersey 2 et développé un client Java RESTFul simple.

Comme toujours, le code source complet est disponible dans ce projet Github.