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 .