JAX-RS klient med Jersey

1. Oversigt

Jersey er en open source-ramme til udvikling af RESTFul Web Services. Det har også store indbyggede klientfunktioner.

I denne hurtige vejledning vil vi undersøge oprettelsen af ​​JAX-RS-klient ved hjælp af Jersey 2.

For en diskussion om oprettelsen af ​​RESTful Web Services ved hjælp af Jersey henvises til denne artikel.

2. Maven-afhængigheder

Lad os begynde med at tilføje de krævede afhængigheder (for Jersey JAX-RS-klient) i pom.xml:

 org.glassfish.jersey.core jersey-klient 2.25.1 

Sådan bruges Jackson 2.x som JSON-udbyder:

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

Den seneste version af disse afhængigheder kan findes på jersey-client og jersey-media-json-jackson.

3. RESTFul-klient i Jersey

Vi udvikler en JAX-RS-klient til at forbruge de JSON- og XML REST-API'er, som vi udviklede her (vi skal sørge for, at tjenesten er implementeret, og URL'en er tilgængelig).

3.1. Ressourcerepræsentationsklasse

Lad os se på ressourcerepræsentationsklassen:

@XmlRootElement offentlig klasse medarbejder {privat int id; privat streng fornavn; // standard getters og setter}

JAXB-kommentarer som @XmlRootElement kræves kun, hvis der er behov for XML-support.

3.2. Oprettelse af en forekomst af en Klient

Den første ting, vi har brug for, er en forekomst af en Klient:

Klientklient = ClientBuilder.newClient ();

3.3. Oprettelse af en WebTarget

Når vi har den Klient eksempel kan vi oprette en WebTarget ved hjælp af URI for den målrettede webressource:

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

Ved brug af WebTarget, kan vi definere en sti til en bestemt ressource:

WebTarget-medarbejderWebTarget = webTarget.path ("ressourcer / medarbejdere");

3.4. Opbygning af en HTTP-anmodning

En påkaldsbyggerinstans oprettes en af WebTarget.request () metoder:

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

For XML-format, MediaType.APPLICATION_XML Kan bruges.

3.5. Påkald af HTTP-anmodninger

Påkalder HTTP GET:

Svarrespons = invocationBuilder.get (Medarbejder.klasse);

Påkalder HTTP POST:

Svarrespons = invocationBuilder .post (Entity.entity (medarbejder, MediaType.APPLICATION_JSON);

3.6. Eksempel på REST-klient

Lad os begynde at skrive en simpel REST-klient. Det getJsonEmployee () metode henter en Medarbejder objekt baseret på medarbejderen id. Den JSON, der returneres af REST-webtjenesten, deserialiseres til Medarbejder genstand inden retur.

Brug JAX-RS API flydende til at oprette webmål, påkaldsbygger og påberåbe sig en GET HTTP-anmodning:

offentlig klasse RestClient {privat statisk endelig streng REST_URI = "// localhost: 8082 / spring-jersey / resources / ansatte"; privat klient klient = ClientBuilder.newClient (); offentlig medarbejder getJsonEmployee (int id) {return client .target (REST_URI) .path (String.valueOf (id)) .request (MediaType.APPLICATION_JSON) .get (Employee.class); } // ...}

Lad os nu tilføje en metode til POST HTTP-anmodning. Det createJsonEmployee () metode skaber en Medarbejder ved at påberåbe sig REST Web Service for Medarbejder skabelse. Klient-API'et internt serielt Medarbejder modsætter sig JSON, før du påberåber dig HTTP POST-metoden:

offentlig reaktion createJsonEmployee (Medarbejder emp) {return client .target (REST_URI) .request (MediaType.APPLICATION_JSON) .post (Entity.entity (emp, MediaType.APPLICATION_JSON)); }

4. Test af klienten

Lad os teste vores klient med JUnit:

offentlig klasse JerseyClientLiveTest {offentlig statisk endelig int HTTP_CREATED = 201; privat RestClient-klient = ny RestClient (); @Test offentlig ugyldighed givenCorrectObject_whenCorrectJsonRequest_thenResponseCodeCreated () {Medarbejder emp = ny medarbejder (6, "Johny"); Svarrespons = client.createJsonEmployee (emp); assertEquals (respons.getStatus (), HTTP_CREATED); }}

5. Konklusion

I denne artikel har vi introduceret JAX-RS-klient ved hjælp af Jersey 2 og udviklet en simpel RESTFul Java-klient.

Som altid er den fulde kildekode tilgængelig i dette Github-projekt.


$config[zx-auto] not found$config[zx-overlay] not found