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

Установить тело ответа в 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.

**