En este post vamos a ver cómo crear una anotación custom para validar campos en Spring Boot. En este caso, vamos a crear una anotación para validar un campo de rut.
Creando la anotación
Para crear una anotación custom en Spring Boot, debemos crear una clase que extienda de ConstraintValidator y anotarla con @Constraint. En este caso, vamos a crear una anotación para validar un campo de rut.
En este caso, la anotación @Rut tiene un atributo message que es el mensaje que se mostrará si la validación falla. También tiene los atributos groups y payload que son necesarios para que la anotación funcione correctamente.
Creando el validador
Ahora vamos a crear la clase RutValidator que extiende de ConstraintValidator y que se encargará de validar el campo de rut.
En este caso, el método isValid es el que se encarga de validar el campo de rut. Si el campo es válido, el método debe retornar true, en caso contrario, debe retornar false.
Usando la anotación
Ahora que ya tenemos la anotación y el validador, podemos usarla en una clase de dominio de la siguiente manera:
En nuestro controlador, podemos usar la anotación @Valid para que Spring Boot valide automáticamente los campos de la clase ClientDTO:
De esta manera, cuando se intente guardar una instancia de Persona con un rut inválido, se lanzará una excepción de tipo ConstraintViolationException.
El error no nos dice mucho, por lo que si queremos mostrar un mensaje más amigable, podemos capturar la excepción y mostrar el mensaje de error con un ControllerAdvice:
Ahora si intentamos guardar una instancia de ClientDTO con un rut inválido, obtendremos un mensaje de error más amigable:
Conclusión
En este post vimos cómo crear una anotación custom para validar un campo de rut en Spring Boot. Esto nos permite tener un código más limpio y fácil de mantener, ya que la lógica de validación está encapsulada en una anotación y un validador.