sábado, 10 de marzo de 2018

Desarrollo RESTful WebService APIs with JAX-RS Parte 6

Git Log History



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