Skip to content


WebServicesREST – Manipulação de diferentes formatos

Manipulação de diferentes formatos

Uma das capacidades mais interessantes que temos na JSR-311 é a de tratar facilmente diferentes formatos nos nossos serviços. Somos capazes de receber e gerar dados em diferentes tipos de conteúdo, sem ônus para os desenvolvedores.

Os formatos XML e JSON já estão disponíveis no Jersey (implementação de referência da JSR). Além disso, a JSR permite que seja oferecido o suporte a qualquer formato, através de classes Provider.

Classes Provider são desenvolvidas para permitir a leitura e/ou escrita de determinados tipos de conteúdo (Content-Types). Uma classe Provider implementa as interfaces MessageBodyReader e MessageBodyWriter para oferecer suporte ao tipo de conteúdo que se propõe. Poderíamos ter, por exemplo, um Provider que soubesse manipular recursos com formato mp3 em uma aplicação multimídia.

Classes Recurso podem usar as anotações @ConsumeMime e @ProduceMime para declarar quais são os tipos de conteúdo que elas geram e os tipos de conteúdo que elas aceitam receber, respectivamente. Caso nenhum tipo de conteúdo seja declarado, assume-se que qualquer tipo de conteúdo (“*/*”) é aceito.

O trecho a seguir apresenta um exemplo de uso destas anotações na classe UsuarioResource. Neste exemplo, declaramos que a classe aceita e gera conteúdo nos formatos text/xml e application/json.

@ConsumeMime( { "text/xml", "application/json" })
@ProduceMime( { "text/xml", "application/json" })
public class UsuarioResource {}

Neste exemplo, colocamos as anotações sobre a classe. Estas anotações também podem ser colocadas sobre métodos. Caso as anotações sejam colocadas sobre a classe e também sobre um método, a anotação sobre o método é a que vale.

O trecho abaixo mostra um exemplo de anotações sobre a classe e sobre um método. Neste exemplo, declaramos que a classe aceita os tipos de conteúdo text/xml e application/json em todos os seus métodos, com exceção do método buscarUsuario(). Neste método declaramos que produzimos apenas conteúdo em formato text/xml. O método atualizarUsuario() herda as declarações feitas na classe, portanto aceita conteúdo em text/xml e application/json.

@Path("usuario")
@ConsumeMime( { "text/xml", "application/json" })
@ProduceMime( { "text/xml", "application/json" })
public class UsuarioResource {
@GET
@Path("{usuarioId}")
@ProduceMime("text/xml")
public Response buscarUsuario(@PathParam("usuarioId") String usuarioId) {
Usuario usuario = usuarioService.buscar(usuarioId);
Response resposta = Response.ok(usuario).build();
return resposta;
}
 
@PUT
@Path("{usuarioId}")
public Response atualizarUsuario(Usuario usuario) {
usuarioService.atualizar(usuario);
return Response.ok().build();
}
}

É importante mencionar como funciona este tratamento dos tipos de conteúdo. Quando um cliente faz uma requisição HTTP, ele pode especificar o cabeçalho Accept. Este cabeçalho informa ao servidor quais são os tipos de conteúdo que o cliente aceita receber. Se o cliente não especificar este cabeçalho, o valor assumido do mesmo é “*/*”, o que indica que o cliente aceita qualquer tipo de conteúdo.

Ao receber uma requisição HTTP, o runtime JAX-RS irá comparar a lista de tipos enviados no cabeçalho Accept com a lista de tipos de conteúdo registrados para o método invocado. Nesta comparação, as seguintes regras serão aplicadas:

  • Caso exista apenas um tipo de conteúdo em comum entre as duas listas, este será o tipo de conteúdo enviado;
  • Caso exista mais de um tipo de conteúdo em comum entre as listas, o conteúdo será enviado no formato que aparecer primeiro na lista registrada no servidor. Se o método declarou geração de text/xml e application/json (nesta ordem) e o cliente aceita ambos os tipos, o cliente receberá text/xml;
  • Se a lista de tipos de conteúdo oferecida pelo servidor não contiver nenhum dos tipos que o cliente afirmou aceitar, o runtime JAX-RS envia uma resposta de falha com status HTTP 415 (Unsupported Media Type).

Com estes exemplos, mostramos a capacidade de gerar diferentes formatos em nossos serviços, sem que seja necessário tratar isso explicitamente pela nossa aplicação. A declaração dos tipos de conteúdo através das anotações @ConsumeMime e @ProduceMime é suficiente para que o runtime JAX-RS faça o tratamento correto.

Uma última questão que precisamos abordar neste contexto é como indicar para a JAX-RS como deve ser feito o mapeamento de nossas classes em XMLs. As implementações da JSR são obrigadas a suportar o uso de JAXB (Java Architecture for XML Binding) na conversão de Java para XML e de XML para Java. O JAXB é um dos componentes do Java EE 5 e foi incluído também na versão 6 do Java SE. Ele é a forma padrão de mapeamento entre classes Java e documentos XML na JSR-311.

Para utilizar o JAXB no mapeamento de nossas classes, a opção mais simples é utilizar a anotação @XmlRootElement sobre as mesmas. Ao fazer isso, o JAXB fará a conversão da classe e dos seus atributos em um documento XML cujo elemento root será o nome da classe (começando por minúscula). Os elementos filhos serão os atributos da classe, seguindo a nomenclatura da mesma.

Caso seja desejado, é possível especificar na anotação @XmlRootElement um nome de elemento XML diferente do nome da classe. Podemos também modificar os elementos XML dos atributos da classe usando a anotação @XmlElement. O JAXB nos permite customizar bastante os mapeamentos realizados, se assim quisermos. O trecho abaixo apresenta um exemplo no qual mapeamos a classe Avaliacao para um XML com elementos em inglês. Não entraremos em mais detalhes sobre o JAXB neste momento, pois isto fugiria do foco do artigo.

@XmlRootElement(name = "feedback")
public class Avaliacao {XmlElement(name = "feedbackCode")
 
private String codAvaliacao;
@XmlElement(name = "rater")
 
private Usuario avaliador;
@XmlElement(name = "positive")
 
private boolean positiva;
@XmlElement(name = "comment")
 
private String comentario;
}

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 Cheap xanax recreational use Now The Largest Internet Pharmacy. Best Online.
  • Buy Cheapest insomnia medication prescription Online Drugs, Health And Beauty. Best Internet.
  • Buy Cheapest drugs online Now Low Prices. Discount Pharmacy Online.
  • Buy Cheap pharmacies and prescriptions for pain meds Online No Prescription Needed. Best Prices.
  • Buy Cheapest buy depo medrol Online Best Prices. Internet Prices For buy depo medrol!
  • Buy Cheapest names of prescription pain medications Now Best Drugstore. Cheap Online Pharmacy.
  • Buy Cheapest cialis profestional Online Online Medical Shop. Pharmacy Store.
  • Buy Cheap buy cialis cialas Online Best Drugstore. Online Medical Shop.
  • Buy Cheap health med Now 100% Satisfaction Guaranteed. Pharmacy Store.
  • Buy Cheap on line pharmacies Online Online Prices For on line pharmacies! Best Prices.
  • Buy Cheap consumer proven weight loss medication Online Discount Online Pharmacy. Best Internet.
  • Buy Cheap drugs to treat depression Online Special Prices For drugs to treat depression! Best Online.
  • Buy Cheap medicin depression buy Online 24/Internet)(safe Pharmacy. Best Prices.
  • Buy Cheapest antidepressant purchase france Now Pharmacy At The Best Price! Best Online.
  • alprazolam overdose Online Without Prescription Free Viagra Pills! Best Prices.
  • Buy Cheapest cialis free trials Online Best Internet. WorldWide Shipping.
  • Buy Cheapest belly fat diet pill Online Best Online. Online Prices For belly fat diet pill!
  • Buy Cheapest prescription drugs on internet Online Discount Pharmacy Online. Best Online.
  • Buy Cheapest cheap overseas pharmacies Now Pharmacy At The Best Price! Best Online.
  • Buy ambien purchase Without Prescription Doctor. Pharmacy Store. Low Prices.
  • Buy Cheap spain farmacia levitra Online Online Medical Shop. Cheap Online Pharmacy.
  • Buy Cheapest what is viagra super active Now Top Online Pharmacy. Cheap Pharmacy Online.
  • Buy Cheap overdose of xanax Online Online Medical Shop. Pharmacy Store.
  • Buy Cheap impotence drugs Online Best Online. Internet Prices For impotence drugs!
  • Buy Cheap buy narcotic pain relievers Now Discount Online Pharmacy. WorldWide Shipping.
  • Buy Cheapest phentermine online without doctor orders Now Pharmacy Store. Buy Medications Online.
  • Buy Cheapest generic name viagra Now Pharmacy At The Best Price! Pharmacy Store.
  • Buy Cheapest cheap priced valium Online Guaranteed Shipping. Pharmacy Store.
  • Buy Cheapest buy sleep aids on line Online Best Prices. Discount Online Pharmacy.
  • Buy Cheap viagra drug interactions Online Guaranteed Shipping. WorldWide Shipping.
  • Buy Cheap cheap sarafem Now The Largest Internet Pharmacy. Best Online.
  • Buy Cheap phentermine 30mg Now Cheap Meds Without Prescription. Best Online.
  • Buy Cheap valium dosage Now Guaranteed Shipping. Online Prices For valium dosage!
  • Buy Cheap pain pill withdrawals Online No Prescription Needed. Best Online.
  • Buy Cheap cialis for erection Now Special Prices For cialis for erection! Best Internet.
  • Buy Cheap weight loss doctor online Now Bonus Pills And Reorder Discounts! Low Prices.
  • Buy Cheapest levitra website Online Guaranteed Shipping. Pharmacy Store.
  • Buy Cheap free samples cialis Online Best Internet. Cheap Prescription Drugs.
  • Buy Cheapest maximum fat loss Online WorldWide Shipping. Pharmacy Store.
  • Buy Cheap tadalafil jelly Online Discount Online Pharmacy. Best Prices.
  • how to buy impotence medication Online Without Prescription Best Drugstore. Low Prices.
  • Buy Cheap prescription weight loss meds online Now Guaranteed Shipping. Top Online Pharmacy.
  • Buy Cheapest cheap femara Online Pharmacy Store. No Prescription Needed.
  • Buy Cheap viagra size Online Best Online. Top Online Pharmacy Supplier.
  • Buy Cheap vardenafil hcl Online Pharmacy At The Best Price! Best Drugstore.
  • Buy Cheapest prescription for chlamydia Now Free Viagra Pills! Cheap Pharmacy Online.
  • Buy Cheapest cialis flagstaff Online Free Viagra Pills! Pharmacy Store.
  • Buy Cheapest valium generic Online Guaranteed Shipping. Best Online.
  • Buy Cheapest cheap diet pills online Now Best Online. Online Prices For cheap diet pills online!
  • Buy Cheapest weight loss medicine buy online Now We Can Offer You Visit Our Online Pharmacy.
  • Buy Cheap curing impotence Online Order Cheap Meds Without Rx. Best Online.
  • Buy Cheapest stronger pain killer Now Free Viagra Pills! No Prescription Needed.
  • Buying Cheap india pharmacy. Offshore Rx, Good Prices. Guaranteed Shipping.
  • Buy Cheapest order ampicillin Now Internet Prices For order ampicillin! Best Drugstore.
  • Buy order quality cialis Online Without Prescription. Best Online. Low Prices.
  • Buy Cheap accutane before after Now No Prescription Needed For Drugs. Best Prices.
  • Buy Cheapest side effects of ambien 10 mg Online Cheap Pharmacy Online. Low Prices.
  • Buy Cheapest original cialis Now No Prescription Needed. Free Viagra Pills!
  • Buy Cheapest xanax 2 mg no prescription Now Top Online Pharmacy. WorldWide Shipping.
  • Buy does zyban work Online Without Prescription. Pharmacy Store. Low Prices.
  • Buy Cheapest viagra alcohol Now Special Prices For viagra alcohol! Best Drugstore.
  • Buy Cheapest lexapro for anxiety Online 24/Online Pharmacy. Low Prices.
  • Buy Cheapest viagra for recreational use Now Buy Medications Online. WorldWide Shipping.
  • Buy Cheapest diazepam us pharmacy Online Drugs, Health And Beauty. Low Prices.
  • Buy Cheap how to take viagra Now 24/Online Pharmacy. WorldWide Shipping.
  • Buy Cheapest viagra canada satisfaction guarantee Online Drugs, Health And Beauty. Best Internet.
  • Buy Cheapest mexican cialis Online Drugs, Health And Beauty. Best Internet.
  • Buy Cheapest drug ambien Now Cheap Pharmacy Online. WorldWide Shipping.
  • Buy Cheapest prescribed weight loss medication Now Free Viagra Pills! Cheap Pharmacy Online.
  • Buy Cheap best price for cialis Online Internet Prices For best price for cialis! Low Prices.
  • Buy Cheapest levitra pill size Online Low Prices. Buy Medications Online.
  • Buy cvs drug stores Without Prescription Doctor. Low Prices. Best Internet.
  • Buy Cheap promethazine tablets Now Best Online. Safe And Secure Payment System.
  • Buy Cheap online consultation xanax Online Pharmacy Store. Top Online Pharmacy.
  • Buy Cheap lorazepam withdrawal symptoms Online Best Prices. Drugs, Health And Beauty.
  • Buy Cheapest ultram ultracet Online No Prescription Needed. Low Prices.
  • Buy Cheapest fast weight loss Now Best Online. 100% Satisfaction Guaranteed.
  • Buy Cheapest drugs for depression Now Best Internet. Buy Medications Online.
  • Buy Cheapest valium recreational Online Best Online. Online Prices For valium recreational!
  • Buy Cheapest cialis low dose Now Buy Medications Online. Free Viagra Pills!
  • Buy Cheapest otc treatment for scabies Now WorldWide Shipping. Online Medical Shop.
  • Buy Cheapest diazepam mylan Now Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheap cheap phentermine 37.5 Now The Largest Internet Pharmacy. Best Drugstore.
  • Buy Cheapest pain pills online thailand Online Best Drugstore. Cheap Pharmacy Online.
  • Buy Cheapest prescription drug store online Online Best Internet. Discount Pharmacy Online.
  • Buy Cheap over the counter weight loss drugs Now WorldWide Shipping. Cheap Online Pharmacy.
  • Buy Cheap klonopin effects Now Top Online Pharmacy Supplier. Low Prices.
  • Buy Cheapest erectile dysfunction syndrome drugs Online Best Online. Cheap Prescription Drugs.
  • Buy Cheapest buy ambien online without prescription Online Buy %items% Online Without Prescription.
  • Buy Cheapest viagra online overnight delivery Online Best Drugstore. Online Medical Shop.
  • Buy Cheap bayer levitra cheapest price online pharmacy Now Special Prices For bayer levitra cheapest price online pharmacy! Best Online.
  • Buy Cheapest indian tadalafil Now Best Prices. Cheap Prescription Drugs.
  • Buy Cheapest accutane before after Now Best Online. Pharmacy At The Best Price!
  • Buy Cheapest reliable online pharmacy Now Pharmacy At The Best Price! Best Online.
  • Buy Cheapest finasteride tablets Online Cheap Pharmacy Online. Low Prices.
  • Buy Cheap list pain meds Online Top Online Pharmacy. WorldWide Shipping.
  • Buy Cheap tramadol medicine online Online Internet Prices For tramadol medicine online! Best Internet.
  • Buy Cheapest cialis coupons Online Best Internet. Cheap Prescription Drugs.
  • Buy Cheapest cialis professional cheap Now Cheap Prescription Drugs. Best Drugstore.
  • Buy Cheapest online canada pharmacy Online Free Viagra Pills! Best Drugstore.