Установить тело ответа в JAX-RS
**
1. обзор
Чтобы упростить разработку веб-служб REST и их клиентов на Java, была разработана стандартная переносимая реализация APIJAX-RS, которая называется Jersey.
Jersey - это платформа с открытым исходным кодом для разработки веб-сервисов REST, которые обеспечивают поддержку APIJAX-RS и служат эталонной реализациейJAX-RS.
В этом руководстве мы рассмотрим, как настроить тело ответаJersey с различными типами мультимедиа.
2. Maven Зависимости
Во-первых, нам нужны следующие зависимости, включенные в файлpom.xml:
org.glassfish.jersey.bundles
jaxrs-ri
2.26
org.glassfish.jersey.core
jersey-server
2.26
Последнюю версиюJAX-RS можно найти наjaxrs-ri, а серверJersey можно найти на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
Если тип носителя не указан,Jersey will default to text/plain.
3.2. Ответ об ошибке
Errors can also be sent back как ответ Джерси:
@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. Обычный текстовый ответ
Мы также можем вернутьsimple plain text responses:
@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 Object (POJO) can also be used build a Jersey response.
У нас есть очень простой POJOPerson, показанный ниже, который мы будем использовать для создания ответа:
public class Person {
String name;
String address;
// standard constructor
// standard getters and setters
}
POJOPerson теперь можно использовать дляreturn JSON as the Response body:
@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 будет преобразована в JSON и отправлена обратно в ответ:
{"address":"Nepal","name":"Abhinayak"}
3.5. Ответ JSON с использованием простой строки
Мы можем использоватьpreformatted strings to create a response, и это можно сделать просто.
Следующая конечная точка является примером того, как JSON, представленный какString, может быть отправлен обратно как 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"}
The same pattern applies for other common media types like XML or HTML. Нам просто нужно уведомить Джерси, что это XML или HTML, используяMediaType.TEXT_XML илиMediaType.TEXT_HTML, а Джерси сделает все остальное. __
4. Заключение
В этой быстрой статье мы построили ответы на основе Jersey (JAX-RS) для различных типов носителей.
Все фрагменты кода, упомянутые в статье, можно найти вover on GitHub.
**