Lenguajes de Programación

Cómo añadir soporte para XML en una API Rest

Si quieres aprender cómo añadir soporte para trabajar con XML en tu API REST, además de trabajar con JSON, puedes hacerlo en este artículo, dónde se explica de forma teórica y práctica.

Publicado el 02 de Diciembre de 2019
Compartir

Diferencia entre un recurso y la representación de un recurso

Para aprender cómo añadir soporte para XML en nuestra API REST, debemos comenzar explicando la diferencia entre un recurso y la representación de un recurso.

La arquitectura REST se basa en definir la exposición de los elementos que manejemos dentro de nuestra aplicación como recursos, en lugar de hablar de servicios, que sería más un tipo de arquitectura RPC.

En lugar de pensar en un servicio que nos devuelva un listado de personas, por ejemplo, hablaríamos del recurso “personas” o del recurso “productos” o del recurso “facturas”.

Una cosa es el recurso en sí, que podría ser un listado de elementos de tipo “producto” o “personas”, y otra cosa es la representación que le podamos dar, porque ese mismo recurso lo podríamos presentar en diferentes formatos.

Tenemos el formato JSON, que se saca de la notación que utiliza JavaScript para definir objetos. Podríamos utilizar también XML, que es un lenguaje de marcas con bastante solera. Incluso podríamos querer obtener ese recurso con una representación también en HTML.

Conviértete en un Backend Developer
Domina los lenguajes de programación más demandados. Accede a cursos, talleres y laboratorios para crear proyectos con Java, Python, PHP, Microsoft .NET y más
Comenzar gratis ahora

Negociado de contenido

En el marco del protocolo HTTP tenemos un proceso que es el negociado de contenido, que consiste en que, al realizar una petición desde un cliente a un servidor, se puede negociar entre ambas partes el formato de la representación del recurso que se envía o del que se quiere recibir.

Todo ello se hace gestionando determinadas cabeceras:

  • Accept: indica, desde el cliente al servidor, el tipo de dato que espera en la respuesta.

  • Content-Type: indica, desde el cliente al servidor, el contenido del cuerpo de la petición que se está realizando.

Formato por defecto

Cuando estamos trabajando con una API REST desarrollada con Spring Boot, por defecto, Spring trabaja JSON.

Esto es debido a que dentro de una de esas dependencias transitivas que tenemos, una de las que se incluye es Jackson 2, y como Spring Boot detecta la misma en el classpath, lo que hace es incorporarlo como un conversor en las peticiones HTTP, tanto petición como respuesta.

Por este motivo, siempre que se lo demandemos, siempre que algún método de un controlador esté anotado con @ResponseBody o todo el controlador está anotado con @RestController por defecto, si se devuelve algo, se hará en JSON.

Igualmente, si recibimos en algún controlador alguna petición y viene acompañada con @RequestBody  lo que hará será esperar un JSON para transformarlo en un objeto Java.

Si le indicamos otro tipo de dato, obtendremos un error 406, porque no es aceptable el tipo de dato indicado, ya que no entiende qué es lo que le estamos pidiendo.

Formato XML

Para poder atender a esa petición en ese negociado de contenido que nos lo solicita en formato XML, necesitamos convertir nuestras clases en XML para dar una respuesta, o si fuera una petición, por ejemplo, POST o PUT, que fuéramos capaces de procesar un XML para convertir un objeto Java.

Tenemos diferentes alternativas para ello:

  • JAXB: es el propio estándar que tiene Java para trabajar con XML, pero que nos obligaría a añadir, complementariamente a las anotaciones que ya tenemos, nuevas anotaciones sobre nuestras clases.

  • Jackson XML: nos permite, añadiendo solamente una nueva dependencia, la posibilidad de transformar a XML, sin tener que tocar las clases, modelos y DTOs que estábamos transformando, desde o hacia JSON.

Mejora las habilidades de tus desarrolladores
Acelera la formación tecnológica de tus equipos con OpenWebinars. Desarrolla tu estrategia de atracción, fidelización y crecimiento de tus profesionales con el menor esfuerzo.
Solicitar más información

Jackson XML

La dependencia es sencilla, y sería complementaria a la dependencia Jackson que ya se incluye automáticamente cuando trabajamos con un proyecto de Spring Boot y hemos añadido la dependencia web.

Si la añadimos vamos a poder ver como en lugar de obtener un error 406, vamos a tener un procesamiento en XML y eso es lo que obtendríamos como resultado.

La dependencia Jackson XML es la siguiente:

<dependency>
    <groupId>    com.fasterxml.jackson.dataformat</groupId>
    <artifact>Jackson-dataformat-xml</artifact>
</dependency>

Ejemplo práctico

En el video puedes ver, paso a paso, cómo añadir la dependencia Jackson XML y cómo realizar una petición solicitando que el contenido aceptado sea en XML para obtener el resultado formateado en este formato.

Sin hacer ningún cambio en el modelo y sin añadir ninguna anotación, tan solo añadiendo este complemento Jackson, que por defecto está incluido en Spring Boot cuando añadimos la dependencia web, podemos hacer este negociado de contenido en XML y de una forma bastante sencilla.


Compartir este post

También te puede interesar...

Curso de Spring Core

Curso de Spring Core 5

4 horas y 7 minutos · Curso

Aprende con el curso de Spring Core 5 a utilizar el motor de Spring para crear las mejores aplicaciones empresariales.

  • Desarrollo Web
Spring Boot y Spring MVC

Curso de Spring Boot y Spring MVC 5: Creando una aplicación con Spring Boot y Spring MVC

8 horas y 32 minutos · Curso

Con este curso de Spring Boot y Spring MVC online y en español aprenderás a desarrollar tus propias aplicaciones web usando Spring Boot y Spring …

  • Desarrollo Web
Curso de desarrollo de una API REST con Spring Boot

Curso de desarrollo de una API REST con Spring Boot

4 horas y 34 minutos · Curso

Aprende con este curso a desarrollar una API REST utilizando para ello Spring Boot, desde cero hasta la documentación final de la misma.

  • Desarrollo Web
Artículos
Ver todos