Client JAX-RS avec Jersey

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.

Read more

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.

Read more

Filtres Jersey et intercepteurs

Examinez le fonctionnement des filtres et des intercepteurs dans la structure Jersey.

Read more

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.