Definir um corpo de resposta no JAX-RS

Definir um corpo de resposta no JAX-RS

**

1. Visão geral

Para simplificar o desenvolvimento de serviços da Web REST e seus clientes em Java, uma implementação padrão e portátil da APIJAX-RS foi projetada, chamada Jersey.

Jersey é uma estrutura de código aberto para o desenvolvimento de serviços da Web REST que fornecem suporte para APIsJAX-RS e serve como uma implementação de referênciaJAX-RS.

Neste tutorial, veremos como podemos configurar um corpo de respostaJersey com diferentes tipos de mídia.

2. Dependências do Maven

Primeiro, precisamos das seguintes dependências incluídas no arquivopom.xml:


    org.glassfish.jersey.bundles
    jaxrs-ri
    2.26


    org.glassfish.jersey.core
    jersey-server
    2.26

A versão mais recente deJAX-RS pode ser encontrada emjaxrs-ri, e o servidorJersey pode ser encontrado emjersey-server

3. Resposta em Jersey

Naturalmente, existem diferentes maneiras de construir uma resposta usandoJersey, e veremos como podemos construí-las abaixo.

Todos os exemplos aqui são solicitações HTTP GET e usaremos o comandocurl para testar os recursos.

3.1. Resposta de texto ok

O terminal mostrado aqui é um exemplo simples de como o texto sem formatação pode ser retornado como uma resposta de Jersey:

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

    String message = "This is a text response";

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

Podemos fazer um HTTP GET usandocurl para verificar a resposta:

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

Esse terminal retornará uma resposta da seguinte maneira:

This is a text response

Quando o tipo de mídia não é especificado,Jersey will default to text/plain.

3.2. Resposta a Erro

Errors can also be sent back como uma resposta de Jersey:

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

Para verificar a resposta, podemos fazer uma solicitação HTTP GET usandocurl:

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

A mensagem de erro será enviada de volta na resposta:

There was an internal server error

3.3. Resposta em texto simples

Também podemos retornarsimple 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();
}

Novamente, podemos fazer um HTTP GET usandocurl para verificar a resposta:

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

A resposta será a seguinte:

This is a plain text response

O mesmo resultado também pode ser alcançado por meio da anotaçãoProduces an em vez de usar o métodotype() emResponse:

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

Podemos fazer verificação de resposta usandocurl:

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

Aqui está a resposta:

This is a plain text response via annotation

3.4. Resposta JSON usando POJO

Um simplesPlain Old Java Object (POJO) can also be used build a Jersey response.

Temos um POJOPerson muito simples mostrado abaixo, que usaremos para construir uma resposta:

public class Person {
    String name;
    String address;

    // standard constructor
    // standard getters and setters
}

O POJOPerson agora pode ser usado parareturn 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();
}

O funcionamento deste ponto de extremidade GET pode ser verificado - por meio do seguinte comandocurl:

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

O POJO da pessoa será transformado em um JSON e enviado de volta como resposta:

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

3.5. Resposta JSON usando string simples

Podemos usarpreformatted strings to create a response, e isso pode ser feito de forma simples.

O endpoint a seguir é um exemplo de como um JSON representado comoString pode ser enviado de volta como JSON na resposta de Jersey:

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

Isso pode ser verificado fazendo um HTTP GET usandocurl para verificar a resposta:

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

Chamar esse recurso retornará um JSON:

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

The same pattern applies for other common media types like XML or HTML. Precisamos apenas notificar Jersey que é um XML ou HTML usandoMediaType.TEXT_XML ouMediaType.TEXT_HTMLe Jersey cuidará do resto. __

4. Conclusão

Neste artigo rápido, construímos respostas de Jersey (JAX-RS) para uma variedade de tipos de mídia.

Todos os trechos de código, mencionados no artigo, podem ser encontrados emover on GitHub.

**