Validación programática mediante Spring Boot Starter Validation

En ciertas ocasiones, puede que tengamos la necesidad de validar el contenido de un Java Bean en nuestro servicio. Si por ejemplo, tenemos que crear una request hacia otra API, ahorraremos llamadas a otros servicios, haciendo nosotros la validación. Esto puede ser realmente útil en arquitecturas Event Driven, en las que tengamos que optimizar el uso del ancho de banda.

Para ahorrarnos el desarrollo de nuestro propio validador, ya contamos con las librerías necesarias en la dependencia:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

El siguiente paso consiste en definir los requisitos de nuestro «bean» mediante las anotaciones proporcionadas en el package: javax.validation.constraints.

Por ejemplo:

public class User {

    @NotNull(message = "Name cannot be null")
    private String name;

    @Email(message = "EmailAddress must be a valid email")
    private String emailAddress;

    // Setter and Getters...
}

Si las validaciones existentes no son suficientes, siempre podemos crear las nuestras propias.

Una vez definidos los requisitos de nuestros «beans», únicamente necesitaremos crear nuestro validador y ejecutar la validación:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

// Ejecutamos validación
Set<ConstraintViolation<User>> violations = validator.validate(user);

for (ConstraintViolation<User> violation : violations) {
    System.out.println(violation.getMessage());
}

Si como vemos en el siguiente ejemplo, no utilizamos valores válidos:

User user = new User();
user.setName(null);
user.setEmail("no valid email");

Como resultado se nos mostrarán los diferentes mensajes:

Name cannot be null
EmailAddress must be a valid email

Conclusión

Como hemos podido comprobar es realmente fácil realizar una validación del contenido de nuestros «beans». Evidentemente este es un ejemplo muy naive con el que explicarlo de la manera más simple posible.
Una buena práctica sería definir un @Bean para disponer del validador a través de la inyección de dependencias de Spring.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.