Перейти к основному содержимому

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

· 3 мин. чтения

1. Обзор

Jersey — это платформа с открытым исходным кодом для разработки веб-сервисов RESTFul. Он также имеет отличные встроенные клиентские возможности.

В этом кратком руководстве мы рассмотрим создание клиента JAX-RS с использованием Jersey 2 .

Обсуждение создания веб-сервисов RESTful с использованием Джерси см. в этой статье .

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

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

<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25.1</version>
</dependency>

Чтобы использовать Jackson 2.x в качестве провайдера JSON:

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25.1</version>
</dependency>

Последнюю версию этих зависимостей можно найти по адресу jersey-client и jersey-media-json-jackson .

3. Клиент RESTFul в Джерси

Мы разработаем клиент 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 client = ClientBuilder.newClient();

3.3. Создание веб- цели

Получив экземпляр Client , мы можем создать WebTarget , используя URI целевого веб-ресурса:

WebTarget webTarget 
= client.target("http://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-клиент. Метод getJsonEmployee() извлекает объект Employee на основе идентификатора сотрудника . JSON, возвращаемый веб-службой REST , перед возвратом десериализуется в объект Employee .

Быстрое использование JAX-RS API для создания веб-цели, построителя вызовов и вызова HTTP-запроса GET:

public class RestClient {

private static final String REST_URI
= "http://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);
}
//...
}

Давайте теперь добавим метод для HTTP-запроса POST. Метод createJsonEmployee() создает сотрудника , вызывая веб-службу 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 .