Validación de datos en Java: revisión de herramientas y bibliotecas
La validación (verificación de corrección) de datos es una de las etapas clave en el desarrollo de cualquier aplicación. Sin una verificación confiable de los datos de entrada, la aplicación se vuelve vulnerable a errores, comportamientos incorrectos y ataques. En Java existen varios enfoques y bibliotecas probados que permiten implementar la validación de forma rápida, flexible y con la mínima cantidad de código repetitivo.
En este artículo revisaremos las principales herramientas para la validación de datos en Java: el estándar Bean Validation (Jakarta Validation), su implementación más popular Hibernate Validator, así como una alternativa: Apache Commons Validator. También abordaremos la validación manual para casos simples.
1. Estándar Bean Validation (Jakarta Validation)
Bean Validation (anteriormente JSR 380, ahora Jakarta Validation) es una especificación que define un conjunto de anotaciones para la validación declarativa de objetos Java. La idea principal: usted describe las reglas de verificación directamente en los campos de la clase usando anotaciones, y el motor de validación las verifica automáticamente.
Anotaciones principales
@NotNull— el valor no debe ser null.@NotEmpty— la cadena, colección o arreglo no debe estar vacío (y no ser null).@NotBlank— la cadena no debe estar vacía ni consistir solo en espacios.@Size(min, max)— restricción de longitud de cadena, tamaño de colección o arreglo.@Min/@Max— restricciones numéricas.@Pattern(regexp = "...")— verificación mediante expresión regular.@Email— verificación del formato de dirección de correo electrónico.
Ejemplo de uso
import jakarta.validation.constraints.*;
public class User { @NotBlank(message = "El nombre no puede estar vacío") @Size(min = 2, max = 50) private String name;
@Email(message = "Correo electrónico no válido") @NotNull private String email;
@Min(18) @Max(120) private int age;
// getters y setters}Para ejecutar la validación se utiliza el objeto Validator:
import jakarta.validation.*;import java.util.Set;
public class ValidationExample { public static void main(String[] args) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator();
User user = new User(); user.setName("A"); user.setEmail("invalid-email"); user.setAge(10);
Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> violation : violations) { System.out.println(violation.getMessage()); } }}2. Hibernate Validator — implementación del estándar
Hibernate Validator es la implementación de referencia de la especificación Bean Validation. Soporta completamente todas las anotaciones de Jakarta Validation y agrega sus propias extensiones, como @URL, @CreditCardNumber, @ISBN y otras.
Funcionalidades adicionales
- Validadores personalizados — puede crear sus propias anotaciones y lógica de verificación.
- Grupos de validación — verificar diferentes conjuntos de reglas según el contexto (por ejemplo, creación vs actualización).
- Integración con Spring Boot, Java EE / Jakarta EE lista para usar.
Ejemplo de validador personalizado
import jakarta.validation.Constraint;import jakarta.validation.Payload;import java.lang.annotation.*;
@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = PhoneValidator.class)public @interface ValidPhone { String message() default "Teléfono no válido";