Client JAX-RS con Jersey

1. Panoramica

Jersey è un framework open source per lo sviluppo di servizi Web RESTFul. Ha anche ottime capacità client integrate.

In questo breve tutorial, esploreremo la creazione del client JAX-RS utilizzando Jersey 2.

Per una discussione sulla creazione di servizi Web RESTful utilizzando Jersey, fare riferimento a questo articolo.

2. Dipendenze di Maven

Iniziamo aggiungendo le dipendenze richieste (per il client Jersey JAX-RS) nel pom.xml :

 org.glassfish.jersey.core jersey-client 2.25.1 

Per utilizzare Jackson 2.x come provider JSON:

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

L'ultima versione di queste dipendenze può essere trovata su jersey-client e jersey-media-json-jackson.

3. Cliente RESTFul in Jersey

Svilupperemo un client JAX-RS per utilizzare le API REST JSON e XML che abbiamo sviluppato qui (dobbiamo assicurarci che il servizio sia distribuito e l'URL sia accessibile).

3.1. Classe di rappresentazione delle risorse

Diamo un'occhiata alla classe di rappresentazione delle risorse:

@XmlRootElement public class Employee { private int id; private String firstName; // standard getters and setters }

Le annotazioni JAXB come @XmlRootElement sono richieste solo se è necessario il supporto XML.

3.2. Creazione di un'istanza di un client

La prima cosa di cui abbiamo bisogno è un'istanza di un client :

Client client = ClientBuilder.newClient();

3.3. Creazione di un WebTarget

Una volta ottenuta l' istanza del client , possiamo creare un WebTarget utilizzando l'URI della risorsa web di destinazione:

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

Utilizzando WebTarget , possiamo definire un percorso a una risorsa specifica:

WebTarget employeeWebTarget = webTarget.path("resources/employees");

3.4. Creazione di una chiamata di richiesta HTTP

Viene creata un'istanza del generatore di invocazioni uno dei metodi WebTarget.request () :

Invocation.Builder invocationBuilder = employeeWebTarget.request(MediaType.APPLICATION_JSON);

Per il formato XML, è possibile utilizzare MediaType.APPLICATION_XML .

3.5. Invocare richieste HTTP

Invocare HTTP GET:

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

Invocare HTTP POST:

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

3.6. Client REST di esempio

Cominciamo a scrivere un semplice client REST. Il getJsonEmployee () metodo recupera un Dipendente oggetto basato sul dipendente id . Il JSON restituito dal servizio Web REST viene deserializzato nell'oggetto Employee prima di essere restituito.

Utilizzo fluente dell'API JAX-RS per creare target web, generatore di invocazioni e invocare una richiesta 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); } //... }

Aggiungiamo ora un metodo per la richiesta POST HTTP. Il metodo createJsonEmployee () crea un dipendente richiamando il servizio Web REST per la creazione di dipendenti . L'API client serializza internamente l' oggetto Employee in JSON prima di richiamare il metodo HTTP POST:

public Response createJsonEmployee(Employee emp) { return client .target(REST_URI) .request(MediaType.APPLICATION_JSON) .post(Entity.entity(emp, MediaType.APPLICATION_JSON)); }

4. Testare il client

Testiamo il nostro cliente con 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. conclusione

In questo articolo, abbiamo introdotto il client JAX-RS utilizzando Jersey 2 e sviluppato un semplice client Java RESTFul.

Come sempre, il codice sorgente completo è disponibile in questo progetto Github.