JAX-RS-klant met Jersey

1. Overzicht

Jersey is een open source framework voor het ontwikkelen van RESTFul Web Services. Het heeft ook geweldige ingebouwde clientmogelijkheden.

In deze korte tutorial zullen we het maken van een JAX-RS-client met Jersey 2 onderzoeken.

Raadpleeg dit artikel voor een bespreking van het maken van RESTful Web Services met Jersey.

2. Maven afhankelijkheden

Laten we beginnen met het toevoegen van de vereiste afhankelijkheden (voor Jersey JAX-RS-client) in het pom.xml:

 org.glassfish.jersey.core jersey-client 2.25.1 

Om Jackson 2.x als JSON-provider te gebruiken:

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

De nieuwste versie van deze afhankelijkheden is te vinden op jersey-client en jersey-media-json-jackson.

3. RESTFul-klant in Jersey

We zullen een JAX-RS-client ontwikkelen om de JSON- en XML REST-API's te gebruiken die we hier hebben ontwikkeld (we moeten ervoor zorgen dat de service wordt geïmplementeerd en dat de URL toegankelijk is).

3.1. Klasse voor representatie van bronnen

Laten we eens kijken naar de resource representatieklasse:

@XmlRootElement openbare klasse Werknemer {privé int id; private String voornaam; // standaard getters en setters}

JAXB-annotaties zoals @XmlRootElement zijn alleen vereist als XML-ondersteuning nodig is.

3.2. Een instantie maken van een Cliënt

Het eerste dat we nodig hebben, is een instantie van een Cliënt:

Client client = ClientBuilder.newClient ();

3.3. Een WebTarget

Zodra we de Cliënt we kunnen bijvoorbeeld een WebTarget met behulp van de URI van de beoogde webresource:

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

Gebruik makend van WebTargetkunnen we een pad naar een specifieke bron definiëren:

WebTarget employeeWebTarget = webTarget.path ("bronnen / medewerkers");

3.4. Een HTTP-verzoekaanroep bouwen

Er wordt een instantie van de aanroepbouwer gemaakt met een van de WebTarget.request () methoden:

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

Voor XML-indeling, MediaType.APPLICATION_XML kan worden gebruikt.

3.5. HTTP-verzoeken aanroepen

HTTP GET aanroepen:

Antwoordantwoord = invocationBuilder.get (Employee.class);

HTTP POST aanroepen:

Antwoordantwoord = invocationBuilder .post (Entity.entity (medewerker, MediaType.APPLICATION_JSON);

3.6. Voorbeeld van REST-client

Laten we beginnen met het schrijven van een eenvoudige REST-client. De getJsonEmployee () methode haalt een Werknemer object op basis van de werknemer ID kaart. De JSON die door de REST-webservice wordt geretourneerd, wordt gedeserialiseerd naar het Werknemer object voordat u terugkeert.

De JAX-RS API vloeiend gebruiken om een ​​webdoel, aanroepbouwer te maken en een GET HTTP-verzoek aan te roepen:

openbare klasse RestClient {private static final String REST_URI = "// localhost: 8082 / spring-jersey / resources / workers"; private Client client = ClientBuilder.newClient (); openbare werknemer getJsonEmployee (int id) {retour client .target (REST_URI) .path (String.valueOf (id)) .request (MediaType.APPLICATION_JSON) .get (Employee.class); } // ...}

Laten we nu een methode toevoegen voor POST HTTP-verzoek. De createJsonEmployee () methode maakt een Werknemer door de REST-webservice voor Werknemer creatie. De client-API serialiseert intern het Werknemer bezwaar maken tegen JSON voordat de HTTP POST-methode wordt aangeroepen:

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

4. Testen van de klant

Laten we onze klant testen met JUnit:

openbare klasse JerseyClientLiveTest {openbare statische finale int HTTP_CREATED = 201; private RestClient-client = nieuwe RestClient (); @Test openbare ongeldig gegevenCorrectObject_whenCorrectJsonRequest_thenResponseCodeCreated () {Werknemer emp = nieuwe werknemer (6, "Johny"); Antwoordrespons = client.createJsonEmployee (emp); assertEquals (response.getStatus (), HTTP_CREATED); }}

5. Conclusie

In dit artikel hebben we de JAX-RS-client geïntroduceerd met Jersey 2 en een eenvoudige RESTFul Java-client ontwikkeld.

Zoals altijd is de volledige broncode beschikbaar in dit Github-project.