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

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

1. обзор

Jersey - это платформа с открытым исходным кодом для разработки веб-сервисов RESTFul. У этого также есть большие встроенные клиентские возможности.

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

Для обсуждения создания веб-служб RESTful с использованием Джерси см.this article.

Дальнейшее чтение:

REST API с Джерси и Весной

Создание Restful Web-сервисов с использованием Jersey 2 и Spring.

Read more

CORS в JAX-RS

Узнайте, как реализовать механизм общего доступа к ресурсам (CORS) в приложениях на основе JAX-RS.

Read more

Джерси Фильтры и перехватчики

Посмотрите, как работают фильтры и перехватчики в структуре Джерси.

Read more

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 в Джерси

Мы разработаем клиент JAX-RS для использования API-интерфейсов JSON и XML REST, которые мы разработалиhere (нам нужно убедиться, что служба развернута и 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 client = ClientBuilder.newClient();

3.3. СозданиеWebTarget

Когда у нас есть экземпляр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 на основе сотрудникаid. JSON, возвращаемыйREST Web Service, десериализуется в объектEmployee перед возвратом.

Свободно используя API JAX-RS для создания веб-цели, конструктора вызовов и вызова 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() создаетEmployee, вызываяREST Web Service для созданияEmployee. Клиентский 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-клиент.

Как всегда, полный исходный код доступен вthis Github project.