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