1. Обзор

Для упрощения разработки веб-сервисов REST и их клиентов на Java была разработана стандартная переносимая реализация JAX-RS API, которая называется Jersey.

Jersey — это платформа с открытым исходным кодом для разработки веб-сервисов REST, которая обеспечивает поддержку API-интерфейсов JAX-RS и служит эталонной реализацией JAX-RS.

В этом уроке мы рассмотрим, как настроить тело ответа из Джерси с различными типами медиа.

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

Во-первых, нам нужны следующие зависимости, включенные в файл pom.xml:

Последнюю версию JAX-RS можно найти на jaxrs-ri, а сервер Jersey может можно найти на jersey-server

<dependency>
    <groupId>org.glassfish.jersey.bundles</groupId>
    <artifactId>jaxrs-ri</artifactId>
    <version>2.26</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.26</version>
</dependency>

3. Ответ в Джерси

Естественно, существуют разные способы создания ответа с использованием Джерси, и ниже мы рассмотрим, как мы можем их построить.

Все приведенные здесь примеры являются HTTP-запросами GET, и мы будем использовать команду curl для проверки ресурсов.

3.1. Ok Text Response

Конечная точка, показанная здесь, является простым примером того, как простой текст может быть возвращен в качестве ответа Jersey:

Мы можем выполнить HTTP GET, используя curl для проверки ответа:

@GET
@Path("/ok")
public Response getOkResponse() {

    String message = "This is a text response";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .build();
}

~~ ~ Эта конечная точка отправит ответ в следующем виде:

curl -XGET http://localhost:8080/jersey/response/ok

Если тип носителя не указан, Джерси по умолчанию будет использовать text/plain.

This is a text response

3.2. Ответ об ошибке

Ошибки также могут быть отправлены обратно в виде ответа Джерси:

Чтобы проверить ответ, мы можем выполнить HTTP-запрос GET с помощью curl:

@GET
@Path("/not_ok")
public Response getNOkTextResponse() {

    String message = "There was an internal server error";

    return Response
      .status(Response.Status.INTERNAL_SERVER_ERROR)
      .entity(message)
      .build();
}

Сообщение об ошибке будет отправлено обратно в ответе:

curl -XGET http://localhost:8080/jersey/response/not_ok

3.3. Обычный текстовый ответ

There was an internal server error

Мы также можем возвращать простые текстовые ответы:

Опять же, мы можем выполнить HTTP GET, используя curl для проверки ответа:

@GET
@Path("/text_plain")
public Response getTextResponseTypeDefined() {

    String message = "This is a plain text response";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .type(MediaType.TEXT_PLAIN)
      .build();
}

Ответ будет следующим: ~ ~~

curl -XGET http://localhost:8080/jersey/response/text_plain

Тот же результат может быть достигнут с помощью аннотации Produces вместо использования метода type() в ответе:

This is a plain text response

Мы можем выполнить проверку ответа с помощью curl:

@GET
@Path("/text_plain_annotation")
@Produces({ MediaType.TEXT_PLAIN })
public Response getTextResponseTypeAnnotated() {

    String message = "This is a plain text response via annotation";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .build();
}

Вот ответ:

curl -XGET http://localhost:8080/jersey/response/text_plain_annotation

3.4. Ответ JSON с использованием POJO

This is a plain text response via annotation

Простой старый объект Java (POJO) также можно использовать для создания ответа Джерси.

У нас есть очень простой POJO Person, показанный ниже, который мы будем использовать для создания ответа:

POJO Person теперь можно использовать для возврата JSON в качестве тела ответа:

public class Person {
    String name;
    String address;

    // standard constructor
    // standard getters and setters
}

Работу этой конечной точки GET можно проверить с помощью следующей команды curl:

@GET
@Path("/pojo")
public Response getPojoResponse() {

    Person person = new Person("Abhinayak", "Nepal");

    return Response
      .status(Response.Status.OK)
      .entity(person)
      .build();
}

POJO Person будет преобразован в JSON и отправлен обратно в качестве ответа:

curl -XGET http://localhost:8080/jersey/response/pojo

3.5. Ответ JSON с использованием простой строки

{"address":"Nepal","name":"Abhinayak"}

Мы можем использовать предварительно отформатированные строки для создания ответа, и это можно сделать просто.

Следующая конечная точка является примером того, как JSON, представленный в виде строки, может быть отправлен обратно в виде JSON в ответе Джерси:

Это можно проверить, выполнив HTTP GET с использованием curl для проверки ответа :

@GET
@Path("/json")
public Response getJsonResponse() {

    String message = "{\"hello\": \"This is a JSON response\"}";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .type(MediaType.APPLICATION_JSON)
      .build();
}

Вызов этого ресурса вернет JSON:

curl -XGET http://localhost:8080/jersey/response/json

Тот же шаблон применим для других распространенных типов мультимедиа, таких как XML или HTML. Нам просто нужно уведомить Джерси, что это XML или HTML, используя MediaType.TEXT_XML или MediaType.TEXT_HTML, а Джерси сделает все остальное.

{"hello":"This is a JSON response"}

4. Заключение

В этой быстрой статье мы построили ответы Jersey (JAX-RS) для различных типов носителей.

Все фрагменты кода, упомянутые в статье, можно найти на GitHub.

«