Validação de dados em Java: visão geral de ferramentas e bibliotecas
A validação (verificação de correção) de dados é uma das etapas-chave no desenvolvimento de qualquer aplicação. Sem uma verificação confiável dos dados de entrada, a aplicação se torna vulnerável a erros, comportamento incorreto e ataques. Em Java, existem várias abordagens e bibliotecas comprovadas que permitem implementar a validação de forma rápida, flexível e com o mínimo de código repetitivo.
Neste artigo, abordaremos as principais ferramentas para validação de dados em Java: o padrão Bean Validation (Jakarta Validation), sua implementação mais popular Hibernate Validator, bem como uma alternativa — Apache Commons Validator. Abordaremos também a validação manual para casos simples.
1. Padrão Bean Validation (Jakarta Validation)
Bean Validation (anteriormente JSR 380, agora Jakarta Validation) é uma especificação que define um conjunto de anotações para validação declarativa de objetos Java. A ideia principal: você descreve as regras de verificação diretamente nos campos da classe usando anotações, e o mecanismo de validação as verifica automaticamente.
Anotações principais
@NotNull— o valor não deve ser nulo.@NotEmpty— string, coleção ou array não devem estar vazios (e não nulos).@NotBlank— a string não deve estar vazia ou consistir apenas de espaços.@Size(min, max)— limitação do comprimento da string, tamanho da coleção ou array.@Min/@Max— restrições numéricas.@Pattern(regexp = "...")— verificação por expressão regular.@Email— verificação do formato do endereço de e-mail.
Exemplo de uso
import jakarta.validation.constraints.*;
public class User { @NotBlank(message = "O nome não pode estar vazio") @Size(min = 2, max = 50) private String name;
@Email(message = "E-mail inválido") @NotNull private String email;
@Min(18) @Max(120) private int age;
// getters e setters}Para executar a validação, utiliza-se o 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("email-invalido"); user.setAge(10);
Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> violation : violations) { System.out.println(violation.getMessage()); } }}2. Hibernate Validator — implementação do padrão
Hibernate Validator é a implementação de referência da especificação Bean Validation. Ela suporta totalmente todas as anotações do Jakarta Validation e adiciona extensões próprias, como @URL, @CreditCardNumber, @ISBN e outras.
Recursos adicionais
- Validadores personalizados — você pode criar suas próprias anotações e lógica de verificação.
- Grupos de validação — verificar diferentes conjuntos de regras dependendo do contexto (por exemplo, criação vs atualização).
- Integração com Spring Boot, Java EE / Jakarta EE pronta para uso.
Exemplo 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 "Telefone inválido";