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