JAX-RS Client mit Jersey

1. Übersicht

Jersey ist ein Open Source-Framework für die Entwicklung von RESTFul Web Services. Es hat auch große eingebaute Client-Funktionen.

In diesem kurzen Tutorial werden wir die Erstellung eines JAX-RS-Clients mit Jersey 2 untersuchen.

Eine Diskussion zum Erstellen von RESTful Web Services mit Jersey finden Sie in diesem Artikel.

2. Maven-Abhängigkeiten

Beginnen wir mit dem Hinzufügen der erforderlichen Abhängigkeiten (für den Jersey JAX-RS-Client) in der Datei pom.xml :

 org.glassfish.jersey.core jersey-client 2.25.1 

So verwenden Sie Jackson 2.x als JSON-Anbieter:

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

Die neueste Version dieser Abhängigkeiten finden Sie unter jersey-client und jersey-media-json-jackson.

3. RESTFul Client in Jersey

Wir werden einen JAX-RS-Client entwickeln, der die hier entwickelten JSON- und XML-REST-APIs verwendet (wir müssen sicherstellen, dass der Dienst bereitgestellt wird und auf die URL zugegriffen werden kann).

3.1. Ressourcendarstellungsklasse

Werfen wir einen Blick auf die Ressourcendarstellungsklasse:

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

JAXB-Annotationen wie @XmlRootElement sind nur erforderlich, wenn XML-Unterstützung benötigt wird.

3.2. Erstellen einer Instanz eines Clients

Das erste, was wir brauchen, ist eine Instanz eines Clients :

Client client = ClientBuilder.newClient();

3.3. Erstellen eines WebTargets

Sobald wir die Client- Instanz haben, können wir ein WebTarget mithilfe des URI der Zielwebressource erstellen :

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

Mit WebTarget können wir einen Pfad zu einer bestimmten Ressource definieren:

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

3.4. Erstellen eines HTTP-Anforderungsaufrufs

Eine Invocation Builder-Instanz wird mit einer der WebTarget.request () -Methoden erstellt:

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

Für das XML-Format kann MediaType.APPLICATION_XML verwendet werden.

3.5. Aufrufen von HTTP-Anforderungen

Aufrufen von HTTP GET:

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

Aufrufen von HTTP POST:

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

3.6. Beispiel für einen REST-Client

Beginnen wir mit dem Schreiben eines einfachen REST-Clients. Die Methode getJsonEmployee () ruft ein Employee- Objekt basierend auf der Mitarbeiter- ID ab . Der vom REST-Webdienst zurückgegebene JSON wird vor der Rückgabe in das Employee- Objekt deserialisiert .

Verwenden Sie die JAX-RS-API fließend, um ein Webziel, einen Aufrufersteller und das Aufrufen einer GET-HTTP-Anforderung zu erstellen:

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); } //... }

Fügen wir nun eine Methode für die POST-HTTP-Anforderung hinzu. Die Methode createJsonEmployee () erstellt einen Mitarbeiter, indem der REST-Webdienst für die Mitarbeitererstellung aufgerufen wird . Die Client-API serialisiert das Employee- Objekt intern in JSON, bevor die HTTP-POST-Methode aufgerufen wird:

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

4. Testen des Clients

Testen wir unseren Kunden mit 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. Schlussfolgerung

In diesem Artikel haben wir den JAX-RS-Client mit Jersey 2 vorgestellt und einen einfachen RESTFul-Java-Client entwickelt.

Wie immer ist der vollständige Quellcode in diesem Github-Projekt verfügbar.