Validar formularios en Spring Boot

Validar formularios con Spring Boot

En este post te mostraré a validar un formulario en Spring Boot y a mostrar los mensajes de error (para indicar en dónde se equivocó al llenarse) con Thymeleaf.

La validación es muy fácil, pues solo se utilizan anotaciones en la entidad.

Verás que es muy sencillo gracias a las anotaciones como Min, NotNull y Size, las cuales se encuentran en:

javax.validation.constraints.*

Primero: la entidad o clase

Dentro de nuestra clase debemos realizar las anotaciones para validar formularios en Spring Boot. Por cada propiedad que haya, hacemos una anotación.

Por ejemplo, veamos esta validación para que la cadena no sea nula:

En este caso utilizamos la anotación de @NotNull justo arriba de la propiedad llamada nombre.

Las anotaciones también pueden recibir “argumentos”, entre ellos puede ir el mensaje que se muestra en caso de que el dato no sea válido. Por ejemplo:

A través de message indicamos el mensaje que se muestra en caso de que el dato no sea válido al validar formularios en Spring Boot.

Al final del post dejaré un ejemplo completo de otras validaciones para cada propiedad de la clase.

Validar en el controlador

Una vez que hemos definido las validaciones de la clase, es hora de validar en el controlador los datos enviados por formulario.

Para que la validación se realice, debemos indicar la anotación @Valid al inyectar nuestra entidad o clase, y también debemos inyectar BindingResult.

La verdadera comprobación de que los datos son válidos es al llamar a hasErrors(), en caso de que los tenga, se recomienda redirigir al usuario al formulario que llenó de manera equivocada.

Si hasErrors() devuelve false entonces podemos asumir que los datos del formulario son válidos, o mejor dicho, que cumplieron las validaciones indicadas en la entidad.

Mostrar los errores en el formulario

Suponiendo que los datos que el usuario introdujo no son válidos, lo vamos a redireccionar al formulario renderizado con Thymeleaf.

Ahora tenemos disponible a #fields dentro de la vista. En la misma podemos usar th:if (esto es opcional, pues si usamos th:errors no hace falta el if)con:

#fields.hasErrors("campo")

Para mostrar el mensaje de error usamos:

th:errors="*{campo}"

Los errores de formulario se pueden mostrar en cualquier lugar apropiado. Veamos un ejemplo:

En la línea 4 tenemos un div que se mostrará si hay errores en el campo nombre.

Ejemplo completo para validar formularios en Spring Boot

Validar formularios en Spring Boot

Ejemplo de validación de un formulario con Spring Boot usando Bootstrap 4

Ahora que ya he explicado lo básico, voy a mostrar un ejemplo completo de un sistema que ando haciendo, recuerda que es un ejemplo y que debes entender el código antes de copiarlo y pegarlo.

Comenzando por la clase, que a su vez es una entidad. Se pueden observar todas las validaciones que se hacen a las propiedades, por ejemplo, en el precio o en la existencia.

Después tenemos el controlador.

Por el momento solo estoy haciendo la validación del formulario en el método guardarProducto (línea 55) pero como las anotaciones ya están en la clase solo hay que llamara bindingResult.hasErrors en los otros métodos.

Finalmente en la vista tenemos el siguiente formulario. Se agrega la clase dinámica is-invalid en caso de que haya errores, y también se muestra un div con ese mensaje usando th:errors.

Estoy usando th:classappend para agregar la clase de error al input de Bootstrap. También estoy usando el div con la clase invalid-feedback para que la misma se muestre bajo el input.

Obviamente no necesitas estilos para validar formularios en Spring Boot, pero no pasa nada si los agregas.

Así es como terminamos por hoy. Puedes leer más sobre Spring Boot en mi blog.

Validar formularios en Spring Boot

Por parzibyte Tiempo de lectura: 3 min
0