Skip to content


WebServicesREST – Implementação com a JAX-RS

Implementação com a JAX-RS (Java API for RESTFul Web Services)

Para oferecer melhor suporte a serviços REST em Java, foi criada a JSR-311. Veja os objetivos desta JSR.

Com a JAX-RS, um recurso web é implementado como uma classe Recurso e as requisições são tratadas por métodos da mesma. Uma classe Recurso é simplesmente um POJO contendo anotações da JAX-RS para indicar os mapeamentos e operações existentes.

Ciclo de vida e ambiente

Por padrão, uma nova instância da classe Recurso é criada para cada requisição àquele Recurso. Inicialmente o construtor é invocado, dependências necessárias são injetadas, e então o método adequado é executado. Após estas etapas, o objeto fica disponível para o coletor de lixo.

As classes Recurso são instanciadas pelo runtime JAX-RS e devem possuir pelo menos um construtor público. Um construtor público pode incluir parâmetros com uma das seguintes anotações: @Context, @HeaderParam, @CookieParam, @MatrixParam, @QueryParam e @PathParam. Estas anotações realizam injeção de dependências relativas a serviços REST, e são apresentadas na Tabela 3.

Anotação

Descrição

@Context

Injeta uma instância de recursos como UriInfo, HttpHeaders, ServletConfig, ServletContext, HttpServletRequest e HttpServletResponse. Outros recursos de Java EE podem ser opcionalmente oferecidos por uma implementação desta JSR.

@HeaderParam

Extrai o valor de um cabeçalho da requisição HTTP.

@CookieParam

Extrai o valor de um cookie presente na requisição.

@MatrixParam

Extrai o valor de parâmetros enviados no formato chave=valor dentro de um segmento da URI. Exemplo: /usuário/123/itens;categoria=eletronicos;limitePreco=1000

@QueryParam

Extrai o valor de um parâmetro fornecido na query string da requisição.

@PathParam

Extrai o valor de um parâmetro enviado dentro da URI.

Tabela 3. Anotações da JAX-RS para injeção de dependências

Com exceção do Context, estes parâmetros são enviados dentro de URIs, query strings, cabeçalhos HTTP e cookies. Sendo assim, sua representação na camada de transporte é como String. Entretanto, podemos colocar estas anotações sobre parâmetros que não são String, para já recebermos os dados convertidos em um formato mais adequado para nossa manipulação. Tipos de parâmetros que podem ser marcados com estas anotações são:

  • Tipos primitivos
  • Classes que possuam um construtor tendo uma única String como parâmetro
  • Classes que possuam um método estático valueOf() recebendo uma String como parâmetro;
  • List<T>, Set<T> ou SortedSet<T>, onde T satisfaz a condição 2 ou a 3.

A seguir um exemplo de uso destas anotações:

@GET
@Path("{usuarioId}")
public Response buscarUsuario(@PathParam("usuarioId") String usuarioId) {
Usuario usuario = usuarioService.buscar(usuarioId);
Response resposta = Response.ok(usuario).build();
return resposta;
}

Este exemplo mostra como poderia ser um método de busca de usuário recebendo uma URI /usuario/{usuarioId}, como /usuario/123. O parâmetro usuarioId do método poderia ser int ou Integer, caso o ID do usuário fosse um número inteiro. A implementação da API faria a conversão do parâmetro enviado na URI para o tipo especificado no método.

Requisições aos métodos de Recursos

Um método de Recurso é uma operação exposta como um serviço REST. Estes métodos ficam em uma classe Recurso e são anotados com o método HTTP associado à operação em questão. O conjunto de anotações que define os métodos HTTP que podem ser utilizados nas operações é: @GET, @POST, @PUT, @DELETE, @HEAD e @OPTIONS.

Métodos de Recursos que serão expostos para os clientes devem ser públicos. Implementações da JSR devem alertar os desenvolvedores caso encontrem métodos não-públicos que sejam marcados com alguma destas anotações de método HTTP.

Os parâmetros dos métodos são convertidos da requisição de acordo com as anotações apresentadas na Tabela 3. Um método de Recurso pode ter no máximo um parâmetro não-anotado. Este parâmetro não-anotado será obtido do corpo da requisição.

A obtenção de parâmetros do corpo da requisição só faz sentido quando estamos falando de requisições POST e PUT. Estes são os únicos métodos HTTP que possuem um corpo, e quase sempre são utilizados em operações de criação e atualização de Recursos, respectivamente. O trecho a seguir apresenta um exemplo de método que recebe requisições POST para cadastro de usuários.

@POST
public Response cadastrarUsuario(Usuario usuario) {
usuario = usuarioService.cadastrar(usuario);
try {
return Response.created(new URI(usuario.getCodUsuario())).build();
} catch (URISyntaxException e) { throw new RuntimeException(e); }
}

Respostas dos métodos de Recursos

As respostas aos métodos de Recursos podem ser declaradas como void, Response ou qualquer outra classe Java. Retornar void implica em enviar uma resposta com corpo vazio, o que é mapeado em um status HTTP 204 (No Content). Este status é utilizado pela JSR para indicar que a requisição teve sucesso, e a resposta não possui corpo.

Colocar uma classe Java como tipo de resposta fará com que o objeto retornado seja colocado no corpo da resposta. Um objeto nulo enviado na resposta implicará em status HTTP 204 e um objeto não-nulo implicará no status HTTP 200.

A classe Response pode ser colocada como tipo de retorno dos métodos caso desejemos ter mais controle sobre a resposta. Com esta forma de retorno, conseguimos especificar cabeçalhos, corpo, status, cookies e mais algumas informações da resposta enviada.

Até este momento não mencionamos nada a respeito do formato dos Recursos manipulados. Mostramos exemplos de busca e cadastro de usuários, mas ficou explícita nos exemplos apenas a manipulação de objetos Java. A questão dos formatos é muito importante e é coberta na seção “Manipulação de diferentes formatos”.

Tratamento de erros e exceções

Como padrão, quando ocorre uma exceção durante uma chamada REST, o cliente recebe um status HTTP 500 (Internal Server Error). Em muitas situações este status pode não ser satisfatório, pois não fornece muita informação sobre o erro que ocorreu no servidor. Para resolver este problema a JSR-311 permite que a resposta seja personalizada em caso de exceções. Podemos fazer este controle de duas formas.

A primeira forma é com uma exceção especial. Basta disparar uma unchecked exception javax.ws.rs.WebApplicationException. Criando esta exceção podemos passar o status HTTP e um objeto Response, permitindo total controle da resposta que será enviada para o usuário.

Porém, em uma aplicação grande é muito comum termos o lançamento de outras exceções em camadas inferiores. Para esta situação a JSR-311 permite que seja criada uma classe para mapear a resposta correspondente a cada exceção. Este mapeamento seria conhecido apenas pela camada de serviços REST.

A classe de mapeamento deve implementar a interface javax.ws.rs.ext.ExceptionMapper e ser anotada com @Provider. A partir daí, quando a exceção especificada for disparada o controle vai passar para o método toResponse() desta classe. Este método poderá construir a resposta de acordo com a exceção, que é passada como parâmetro.

Sobre a segunda forma de tratar exceções vale citar que ela ainda está sendo implementada na versão 0.8 da especificação, e está sujeita a modificações até a finalização da JSR.

O trecho a seguir apresenta um exemplo de mapeamento de exceção para uma resposta com status HTTP customizado.

@Provider
public class ItemJaVendidoExceptionMapper implements ExceptionMapper {
public Response toResponse(ItemJaVendidoException e) {
return Response.status(Response.Status.GONE).build();
}
}

AnteriorÍndicePróxima


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.



  • Buy Cheapest brand cialis name Now Top Online Pharmacy. Cheap Online Pharmacy.
  • Buy Cheapest generic clomid Online Best Drugstore. Cheap Online Pharmacy.
  • Buy ultram er Without Prescription Doctor. Best Internet. Best Prices.
  • Buy Cheapest pet health pharmacy Now Cheap Prescription Drugs. Low Prices.
  • Buy Cheap effexor withdrawal symptoms Online Best Online. Buy Medications Online.
  • Buy Cheap proscar generic Online Pharmacy At The Best Price! Best Drugstore.
  • Buy Cheapest generic for lexapro Online Order Cheap Meds Without Rx. Low Prices.
  • Buy Cheap diazepam no prescription needed Online Online Prices For diazepam no prescription needed! Best Drugstore.
  • Buy Cheapest us pharmacies no prescription valium Now Pharmacy Store. Special Prices For us pharmacies no prescription valium!
  • candida diflucan Online Without Prescription WorldWide Shipping. Low Prices.
  • Buy Cheap ultram use Now The Largest Internet Pharmacy. Low Prices.
  • Buy Cheapest cures for gonorrhea Online Drugs, Health And Beauty. Best Online.
  • Buy Cheapest withdrawal from codeine contin Now Pharmacy Store. Guaranteed Shipping.
  • Buy Cheap canadian drug pharmacy Online Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheap zoloft dosage Now Best Drugstore. Drugs, Health And Beauty.
  • Buy Cheap prescription diet pills online Online Guaranteed Shipping. Cheap Pharmacy Online.
  • Buy Cheap ultram and pregnancy Online Best Internet. Internet Prices For ultram and pregnancy!
  • new weight loss pills Online Without Prescription Best Prices. Best Drugstore.
  • Buy Cheap sildenafil citrate viagra Now Internet Prices For sildenafil citrate viagra! Low Prices.
  • Buy Cheap diet pills prescribed by doctors Online Discount Pharmacy Online. Pharmacy Store.
  • Buy Cheapest buspar drug Now No Prescription Needed. Pharmacy Store.
  • Buying Cheap tramadol side effects. Offshore Rx, Good Prices. Top Online Pharmacy.
  • Buy Cheap xanax rx Now Discount Pharmacy Online. Pharmacy Store.
  • Buy Cheap buy benicar online no prescription Online Cheap Online Pharmacy. Pharmacy Store.
  • Buy Cheap ultram medication Now Discount Pharmacy Online. Top Online Pharmacy.
  • Buy using clomid Online Without Prescription. Low Prices. Best Internet.
  • Buy Cheap alprazolam 2mg Now Guaranteed Shipping. No Prescription Needed.
  • Buy Cheap viagra canada Now Online Medical Shop. Cheap Online Pharmacy.
  • Buy wal-mart pharmacy Without Prescription Doctor. Best Online. Best Prices.
  • Buy Cheapest online viagra prescriptions Now Pharmacy Store. Cheap Pharmacy Online.
  • Buy Cheap prescription ambien Online No Prescription Needed. Free Viagra Pills!
  • Buy Cheap lasix on line without a prescription Now Guaranteed Shipping. Cheap Prescription Drugs.
  • Buy Cheapest cialis tadafil order online Now Best Online. Discount Pharmacy Online.
  • Buy Cheapest diet pills that work Now Best Online. Top Online Pharmacy Supplier.
  • Buy Cheap cialis canadian generic Now Discount Pharmacy Online. Best Drugstore.
  • Buy Cheapest atenolol drug Online Best Internet. Top Online Pharmacy.
  • Buy Cheapest propecia online Online Guaranteed Shipping. Free Viagra Pills!
  • Buy Cheapest online pharmacy pain pills in florida Now Best Online. Cheap Prescription Drugs.
  • Buy Cheapest effexor dosage Online Top Online Pharmacy. WorldWide Shipping.
  • Buy Cheap weight loss no prescription Now Online Prices For weight loss no prescription! WorldWide Shipping.
  • Buy Cheap price fluconazole Now Online Medical Shop. 24/Online Pharmacy.
  • Buy Cheap addiction to ambien Online Best Drugstore. Top Online Pharmacy.
  • Buy Cheapest buy generic levitra Online Guaranteed Shipping. WorldWide Shipping.
  • sleep disorder treatments Online Without Prescription Low Prices. Best Drugstore.
  • Buy Cheapest cialis for men and wman Now Internet Prices For cialis for men and wman! Best Drugstore.
  • Buy Cheap viagra next day Online Best Online. Drugs, Health And Beauty.
  • Buy Cheap very cheap tramadol Now Cheap Pharmacy Online. Guaranteed Shipping.
  • Buy Cheapest norvasc online Now Best Online. Online Prices For norvasc online!
  • Buying Cheap cialis for overseas. Offshore Rx, Good Prices. Online Medical Shop.
  • Buy Cheap low cost brand viagra fast Now Guaranteed Shipping. Cheap Online Pharmacy.
  • Buy Cheapest discount lipitor Online Pharmacy Store. Buy Medications Online.
  • Buy Cheap low cost viagra online Now Internet Prices For low cost viagra online! Free Viagra Pills!
  • Buy Cheap generic for cialis Now Best Drugstore. No Prescription Needed.
  • Buy Cheap where to buy valium Now Buy Medications Online. Free Viagra Pills!
  • Buy Cheapest prescription pain relief medication Now Discount Pharmacy Online. Low Prices.
  • Buy Cheap fda approved diet drugs Now Best Online. No Prescription Online Pharmacy.
  • Buy Cheap online lorazepam Online Discount Pharmacy Online. Best Drugstore.
  • Buy Cheapest tramadol medicine online Now Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheap legal cialis Online Buy Medications Online. Pharmacy Store.
  • diazepam no prescription 10mg Online Without Prescription Low Prices. Online Medical Shop.
  • Buy 100mg viagra Without Prescription Doctor. Low Prices. Best Internet.
  • Buy Cheap xanax online cheap Now Free Viagra Pills! Buy Medications Online.
  • Buy Cheap xanax online mexico Online Low Prices. Pharmacy At The Best Price!
  • Buy Cheap drugstores france Online Pharmacy At The Best Price! Best Prices.
  • Buy Cheap weight loss prescription drugs Now Discount Pharmacy Online. Free Viagra Pills!
  • Buy Cheap phentermine on line consultation Now Best Internet. Cheap Prescription Drugs.
  • Buy Cheapest purchase xanax without prescription Online Best Online. Pharmacy At The Best Price!
  • Buy Cheap viagra effect on women Online Best Prices. Cheap Prescription Drugs.
  • Buy Cheapest acetaminophen with codeine Online Online Medical Shop. Best Online.
  • Buy Cheapest supplement vitamins Online Discount Online Pharmacy. Low Prices.
  • Buy Cheapest information on weight loss supplement Now No Prescription Needed. Pharmacy Store.
  • Buy Cheapest pain pills online withouth prescription Online Best Drugstore. Guaranteed Shipping.
  • Buy Cheap intensify effects of levitra Online Low Prices. Discount Pharmacy Online.
  • Buy Cheapest weight loss pills australia Online Special Prices For weight loss pills australia! Low Prices.
  • Buy Cheap genuine viagra Online Best Internet. Drugs, Health And Beauty.
  • Buy Cheap cheapest prescription meds online Now Top Online Pharmacy. Drugs, Health And Beauty.
  • Buy Cheapest tyonal codeine Online Top Online Pharmacy. Best Online.
  • Buy Cheap detox parasites Online Best Internet. Discount Online Pharmacy.
  • Buy Cheapest tramadol information Now 24/Online Pharmacy. Best Drugstore.
  • Buying Cheap buy klonopin without prescription. Offshore Pharmacy, Best Prices. Best Internet.
  • Buy Cheap getting off pain pills Now Internet Prices For getting off pain pills! Best Prices.
  • Buy Cheapest fungus fluconazole Now Pharmacy Store. Buy Medications Online.
  • Buy Cheapest phentermine testimonies Now Special Prices For phentermine testimonies! Low Prices.
  • Find The Latest News And Information About what is lorazepam used for Pills Low Prices.
  • Buy muscle spasms drug Online Without Prescription. Best Internet. Best Prices.
  • rating on weight loss programs Online Without Prescription WorldWide Shipping. Best Online.
  • Buying Cheap viagra cod. Mexican Rx, Best Prices. 24/Online Pharmacy.
  • Buy Cheapest fda approved hair loss products Online 24/Online Pharmacy. Best Internet.
  • Buy Cheap viagra vs viagra professional Now Best Internet. Top Online Pharmacy Supplier.
  • Buy xanax prescribed for Without Prescription Doctor. Best Drugstore. Low Prices.
  • prescription only diet pills Online Without Prescription Pharmacy Store. Best Internet.
  • Buy Cheap nexium take Now Safe And Secure Payment System. Low Prices.
  • Buy Cheap low price cost prescription drugs Online Safe And Secure Payment System. Low Prices.
  • Buy Cheap buy valium without prescription Now Buy Medications Online. 24/Online Pharmacy.
  • Buy Cheapest generic viagra mexico Online Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheap color of phentermine 37.5 caps Now Free Viagra Pills! No Prescription Needed.
  • Buy Cheapest diet pills that really work Now Buy Medications Online. Pharmacy Store.
  • Buy Cheap order cialis online Online WorldWide Shipping. Cheap Pharmacy Online.
  • Buy Cheap levitra experiences Now No Prescription Needed. Best Drugstore.
  • Buy Cheapest buy pain killers with no prescription Online Best Prices. 24/Online Pharmacy.