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

Установите тело ответа в JAX-RS

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

1. Обзор

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

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

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

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

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

<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>

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

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

Естественно, есть разные способы построить ответ с помощью Jersey , и мы рассмотрим, как мы можем их построить ниже.

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

3.1. ОК Текстовый ответ

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

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

String message = "This is a text response";

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

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

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

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

This is a text response

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

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

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

@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();
}

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

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

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

There was an internal server error

3.3. Простой текстовый ответ

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

@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();
}

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

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

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

This is a plain text response

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

@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 :

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

Вот ответ:

This is a plain text response via annotation

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

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

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

public class Person {
String name;
String address;

// standard constructor
// standard getters and setters
}

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

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

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

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

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

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

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

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

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

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

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

@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();
}

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

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

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

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

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

4. Вывод

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

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