Validação de dados em Java: guia completo sobre bibliotecas e ferramentas
A validação de dados é um dos principais aspectos do desenvolvimento de aplicações Java confiáveis. Sem ela, é impossível garantir a correção dos dados de entrada, proteção contra entrada incorreta do usuário ou erros de integração com sistemas externos. Neste artigo, vamos explorar as principais bibliotecas e abordagens para validação de dados em Java, desde o padrão Bean Validation até soluções modernas.
Por que a validação é necessária?
A validação permite:
- Filtrar dados incorretos em estágio inicial
- Reduzir o número de erros na lógica de negócios
- Aumentar a segurança da aplicação (proteção contra SQL injection, XSS)
- Melhorar a experiência do usuário (mensagens de erro claras)
1. Jakarta Bean Validation (anteriormente JSR 380)
Este é o padrão Java para validação de objetos usando anotações. A implementação principal é o Hibernate Validator. Suportado a partir do Jakarta EE 9 e Java SE 8+.
Anotações principais
@NotNull— o valor não pode ser null@NotEmpty— string, coleção ou array não podem estar vazios@Size(min, max)— limitação do comprimento da string ou tamanho da coleção@Pattern(regexp)— verificação por expressão regular@Email— endereço de email válido@Min/@Max— limites numéricos
Exemplo de uso
import jakarta.validation.constraints.*;
public class User { @NotNull(message = "O nome não pode ser null") @Size(min = 2, max = 50, message = "O nome deve conter de 2 a 50 caracteres") private String name;
@Email(message = "Formato de email inválido") @NotEmpty(message = "Email é obrigatório") private String email;
@Min(value = 18, message = "A idade deve ser no mínimo 18") @Max(value = 120, message = "A idade não pode exceder 120") private int age;
// getters e setters}Executando a validação
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"); // nome muito curto user.setEmail("invalid-email"); user.setAge(15); // menor que 18
Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> violation : violations) { System.out.println(violation.getMessage()); } }}2. Hibernate Validator — implementação estendida
Hibernate Validator é a implementação de referência do Bean Validation. Adiciona recursos adicionais:
- Anotações de validação personalizadas
- Grupos de validação (para diferentes cenários)
- Suporte a
@ScriptAssertpara verificações complexas
Exemplo de anotação personalizada
import jakarta.validation.*;import java.lang.annotation.*;
@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = PasswordValidator.class)public @interface ValidPassword { String message() default "A senha deve conter letras e números"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}public class PasswordValidator implements ConstraintValidator<ValidPassword, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value == null) return false; return value.matc Também na biblioteca
Trabalhando com YAML em C# (.NET): biblioteca YamlDotNet
Filas de Tarefas para TypeScript: Bull, Bee-Queue e Processamento Assíncrono
Event Bus e o padrão Observer em JavaScript (Node.js) — criação de sistemas de eventos flexíveis