Content Negotiation
Client ----------------------------------------- Server
-- Accept Header -------------------->
application_Json o Text_XML
@Path("/mensajes") @Consumes(MediaType.APPLICATION_JSON) @Produces(value = {MediaType.APPLICATION_JSON, MediaType.TEXT_XML}) public class MessageResource { MessageService messageService = new MessageService(); @GET public List<Message> getMessages(@BeanParam MessageFilterBean filterBean) { if (filterBean.getYear() > 0 ) return messageService.getAllMessageForYear(filterBean.getYear());...
Accept Header = text/xml
Accept Header = application/json
Se pueden mapear los métodos específicamente al tipo de contenido a generar (@Produces)
Vamos a Mappear la solicitud GET con header Accept=application/json al método getJsonMessages(...
y una solicitud GET con header Accept=text/xml al método getXmlMessages(...
la modificación a MessageResorces queda de la siguiente manera
@Path("/mensajes") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class MessageResource { MessageService messageService = new MessageService(); @GET @Produces(MediaType.APPLICATION_JSON) public List<Message> getJsonMessages(@BeanParam MessageFilterBean filterBean) { System.out.println("json producido"); if (filterBean.getYear() > 0 ) return messageService.getAllMessageForYear(filterBean.getYear()); if (filterBean.getStart() >= 0 && filterBean.getSize() > 0) { return messageService.getAllMessagePaginated(filterBean.getStart(), filterBean.getSize()); } return messageService.getAllMessages(); } @GET @Produces(MediaType.TEXT_XML) public List<Message> getXmlMessages(@BeanParam MessageFilterBean filterBean) { System.out.println("xml producido"); if (filterBean.getYear() > 0 ) return messageService.getAllMessageForYear(filterBean.getYear()); if (filterBean.getStart() >= 0 && filterBean.getSize() > 0) { return messageService.getAllMessagePaginated(filterBean.getStart(), filterBean.getSize()); } return messageService.getAllMessages(); }
GET Accept=application/json
GET Accept=text/xml
Si por ejemplo intentamos dar de alta un nuevo mensaje, el cual esta en formato xml, el cual no esta soportado, indicamos en el header content-type=text/xml, y en el body el mensaje en formato xml.
nos indica el error de la siguiente manera.
CLIENT SERVER
Accept <---------------> @Produces
Content-Type <----------------> @Consumes
fin texto.
No hay comentarios:
Publicar un comentario