Клиент на JAX-RS с Джърси

1. Общ преглед

Джърси е рамка с отворен код за разработване на RESTFul Web Services. Той също така има страхотни вградени възможности на клиента.

В този бърз урок ще изследваме създаването на JAX-RS клиент, използвайки Jersey 2.

За дискусия относно създаването на RESTful Web Services с помощта на Джърси, вижте тази статия.

2. Зависимости на Maven

Нека започнем с добавяне на необходимите зависимости (за клиент Jersey JAX-RS) в pom.xml :

 org.glassfish.jersey.core jersey-client 2.25.1 

За да използвате Jackson 2.x като доставчик на JSON:

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

Най-новата версия на тези зависимости може да бъде намерена в jersey-client и jersey-media-json-jackson.

3. RESTFul Client в Джърси

Ще разработим клиент на JAX-RS, за да използваме JSON и XML REST API, които разработихме тук (трябва да се уверим, че услугата е внедрена и URL адресът е достъпен).

3.1. Клас на представяне на ресурса

Нека да разгледаме класа за представяне на ресурсите:

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

JAXB анотации като @XmlRootElement се изискват само ако е необходима XML поддръжка.

3.2. Създаване на екземпляр на клиент

Първото нещо, от което се нуждаем, е екземпляр на клиент :

Client client = ClientBuilder.newClient();

3.3. Създаване на WebTarget

След като имаме клиентския екземпляр, можем да създадем WebTarget, използвайки URI на целевия уеб ресурс:

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

Използвайки WebTarget , можем да дефинираме път към определен ресурс:

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

3.4. Изграждане на HTTP заявка за извикване

Екземпляр на конструктор на извиквания се създава един от методите WebTarget.request () :

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

За XML формат може да се използва MediaType.APPLICATION_XML .

3.5. Извикване на HTTP заявки

Извикване на HTTP GET:

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

Извикване на HTTP POST:

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

3.6. Примерен REST клиент

Нека започнем да пишем прост REST клиент. Методът getJsonEfficiee () извлича обект на служител въз основа на идентификатора на служителя . JSON, върнат от REST Web Service, се десериализира в обекта на служител преди връщането.

Използване на JAX-RS API плавно за създаване на уеб цел, конструктор на извиквания и извикване на GET HTTP заявка:

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

Нека сега добавим метод за POST HTTP заявка. Методът createJsonEfficiee () създава служител чрез извикване на уеб услугата REST за създаване на служител . Клиентският API вътрешно сериализира обекта Employee към JSON, преди да извика метода HTTP POST:

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

4. Тестване на клиента

Нека тестваме нашия клиент с 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. Заключение

В тази статия въведохме JAX-RS клиент, използвайки Jersey 2 и разработихме прост RESTFul Java клиент.

Както винаги, пълният изходен код е наличен в този проект на Github.