Proyecto Jersey + Spring Boot + MyBatis

0
1504

0. Índice de contenidos.

1. Introducción.

El objetivo que perseguimos con este tutorial es integrar el uso de Jersey en una aplicación con Spring Boot.
Para ello, la mejor manera de conocer una tecnología es construir un prototipo con ella, así que eso es justamente lo que vamos a hacer.
Vamos a construir una aplicación sencilla que gestione “cursos” a través de un API REST, se trata de construir un CRUD sobre una simple tabla (Cursos),
haciéndolo a través de servicios web REST. Aunque es bastante sencillo, el ejemplo resalta las anotaciones más comunes que se necesitarán
para construir nuestra API REST.

Antes de continuar vamos a explicar brevemente qué es JAX-RS y Jersey:

Java API for RESTful Web Services (JAX-RS) es un modelo de programación que proporciona soporte en la creación de servicios web que cumplan
los principios REST (Representational State Transfer). JAX-RS usa anotaciones, introducidas en Java SE 5, para simplificar el desarrollo y despliegue
de los clientes y puntos finales de los servicios web.

El framework de Jersey no es más que la Implementación de referencia JAX-RS. Jersey proporciona su propia API que amplía el conjunto de herramientas JAX-RS
con características y utilidades adicionales para simplificar aún más el servicio RESTful y el desarrollo del cliente. Jersey también expone numerosos SPI
de extensión para que los desarrolladores puedan extender Jersey y que se adapte mejor a sus necesidades.

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2.3 GHz Intel Core i7, 16GB DDR3).
  • Sistema Operativo: Mac OS High Sierra 10.13.3
  • Oracle Java: 1.8.0_171
  • Apache Maven: 3.5.4
  • Spring Boot: 2.0.3.RELEASE
  • Jersey: 2.26

3. Configuración.

Vamos a crear nuestro proyecto, se recomienda la configuración mediante el sistema de gestión de dependencias de maven y, para ello, vamos a hacer uso del wizard que nos proporciona el IDE, que se va a encargar de incluir
las dependencias que seleccionemos en el proceso en nuestro pom.xml, establecemos los datos principales que necesita el wizard tal y como se puede ver en la siguiente imagen:

A continuación marcamos las dependencias para Jersey, JPA y MySQL y finalizamos el proceso de creación de proyecto.


Deberíamos tener nuestro proyecto configurado en nuestro IDE con al menos las siguientes dependencias en el pom.xml:

Esta es la configuración mínima que necesitamos para empezar a trabajar con nuestra API REST utilizando Jersey, a continuación vamos a configurar
el contenedor de Jersey, para ello creamos un paquete Java para nuestras clases de configuración (por ser un poco organizados con nuestro código) y
posteriormente creamos una nueva clase de configuración que vamos a llamar ‘JerseyConfiguration’ dentro de él, con el siguiente código:

El servlet Jersey se registra y asigna al path “/*” de forma predeterminada, en nuestro ejemplo hemos querido cambiar dicha asignación a “/rest”, para ello hemos
agregado la anotación @ApplicationPath a nuestra clase de configuración. También hemos configurado nuestro contenedor de Jersey para registrar los recursos
mediante la definición del paquete donde residirán los mismos, pero podríamos registrar los recursos individualmente como se puede ver a continuación:

4. Configuración de la base de datos.

Antes de comenzar con nuestro CRUD vamos a configurar una base de datos h2 (ya que estamos en un entorno de pruebas) donde podremos mantener nuestra
tabla de cursos, lo primero de todo es configurar nuestro fichero pom.xml añadiendo las siguientes dependencias:

Modificamos nuestro fichero application.properties para añadir la siguiente configuración:

Creamos un nuevo fichero que vamos a llamar ‘schema.sql’ en src/main/resources para que Spring Boot se encargue de crear y poblar nuestra tabla ‘Cursos’, para
ello añadimos las siguientes sql:

5. Configuración de MyBatis.

Ahora vamos con la capa de persistencia, MyBatis en nuestro proyecto, en este apartado no me voy a explayar mucho ya que podéis encontrar más información en los tutoriales de
Adictos, para ello deberíamos tener incluida la siguiente dependencia en el pom.xml:

Modificamos nuestro fichero application.properties para añadir la siguiente configuración:

Por último añadimos nuestra clase de aplicación para Spring Boot (‘CourseManagementApplication’) para añadir la anotación de configuración
‘MapperScan’ para indicar el paquete donde iremos añadiendo nuestras clases ‘Mapper’ de MyBatis:

6. Implementación de la capa de persistencia de nuestro CRUD.

Debido a que este punto no es el foco principal de este tutorial, esta parte voy a ir más rápido dejando los ejemplos de código sin comentar mucho para no
hacer este tutorial muy extenso, en nuestra web de Adictos podéis encontrar tutoriales que os ayuden a entender esta parte mejor.

Entidad ‘Curso’:

Mapper para nuestra entidad ‘Curso’:

Interfaz de servicio para nuestra entidad ‘Curso’:

Implementación MyBatis del servicio para nuestra entidad ‘Curso’:

7. Implementación del recurso REST de nuestro CRUD.

Hasta ahora todo lo que hemos hecho ha sido crear y configurar el proyecto, además de desarrollar nuestra capa de persistencia y negocio. Ahora vamos
a comenzar con el objetivo de nuestro tutorial, vamos a crear nuestro servicio REST que, basándonos en el acrónimo CRUD, inserte un curso en nuestra tabla ‘COURSES’:

La anotación @Path identifica la plantilla de ruta de la URI a la que responde el recurso, esta anotación puede especificarse a nivel de clase o método
de un recurso. El valor de la anotación @Path es una plantilla de ruta de la URI parcial en relación con la URI base del servidor en el cual se implementa
el recurso, la raíz del contexto de la aplicación y el patrón de URL a la que responde el runtime de JAX-RS.

La anotación @POST indica que el método anotado responde a las peticiones HTTP POST del API REST, para usar en llamadas de tipo ‘CREATE’.

A continuación os muestro un ejemplo de invocación desde postman con la confirmación de la creación del recurso mediante nuestro API REST:

NOTA: Recordar que para evitar errores hay que añadir en la cabecera de la petición el ‘Content-Type’ y establecerlo a ‘application/json’

El siguiente paso lógico sería realizar un servicio que se encargue de la consulta de nuestro recurso, para ello añadimos en nuestro recurso los siguientes
métodos:

La anotación @GET indica que el método anotado responde a las peticiones HTTP GET del API REST, para usarse en llamadas del tipo ‘READ’, además podemos
observar que en nuestro segundo método hemos añadido la anotación @Path de nuevo para indicar que queremos añadir a nuestra URI base una parte más, en este
campos queremos indicar el identificador del recurso que será enviado como parámetro a nuestro método.

A continuación os muestro un ejemplo de invocación desde postman con el resultado de la consulta general mediante nuestro API REST:

Y aquí os muestro un ejemplo de invocación desde postman con el resultado de la consulta por identificador mediante nuestro API REST:

Continuamos con el siguiente paso, la modificación de nuestro recurso, para ello añadimos en nuestra clase el siguiente método:

La anotación @PUT indica que el método anotado responde a las peticiones HTTP PUT del API REST, para usarse en llamadas del tipo ‘UPDATE’.

A continuación os muestro un ejemplo de invocación desde postman con la confirmación de la modificación del recurso mediante nuestro API REST:

NOTA: Recordar el ‘Content-Type’, se establece a ‘application/json’

Por último vamos a realizar la eliminación de nuestro recurso, para ello añadimos en nuestra clase el siguiente método:

La anotación @DELETE indica que el método anotado responde a las peticiones HTTP DELETE del API REST, para usarse en llamadas del tipo ‘DELETE’.

A continuación os muestro un ejemplo de invocación desde postman con la confirmación de la eliminación del recurso mediante nuestro API REST:

8. Referencias.

9. Conclusiones.

En este tutorial hemos visto cómo crear un sencillo CRUD mediante API REST de Jersey. Algunos se preguntarán porque usar JAX-RS con Jersey en lugar del
estandar de Spring. La respuesta sería porque Jersey es la implementación del estándar de JEE, por ello estamos menos acoplados a Spring y nuestro código
podría ejecutarse sin mayores problemas en cualquier servidor JEE.

Espero que os haya gustado y que os haya servido, con esa intención ha sido creado. 😉

Un saludo.

Javi

Dejar respuesta

Please enter your comment!
Please enter your name here