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.