Este artigo apresenta o Hibernate Validator, implementação de referência da JSR 303 – Bean Validation API. Esta API permite validar, de forma fácil, objetos de classes que representam o domínio de uma aplicação.
Para que serve:
Este artigo serve para introduzir os desenvolvedores à API Hibernate Validator, que possibilita incorporar validação aos dados da aplicação através de uma API fácil de usar e de customizar.
Em que situação o tema é útil:
Os desenvolvedores que desejam aprender como o Hibernate Validator funciona e como integrá-lo em suas aplicações encontrarão neste artigo explicações detalhadas sobre o funcionamento desta API.
Conhecendo o Hibernate Validator:
A Bean Validation API, representada pela JSR 303, foi disponibilizada em dezembro de 2009. O Hibernate Validator surgiu como a implementação de referência desta API e permite utilizar anotações para validar dados de forma fácil e rápida. A grande vantagem é que a Bean Validation API independe da camada da aplicação onde é usada e até da forma de programar, podendo ser utilizada nos mais diversos cenários. Este artigo aborda em detalhes o funcionamento do Hibernate Validator.
Em dezembro de 2009, a versão final da JSR 303 foi disponibilizada. Trata-se da Bean Validation API, que permite validar dados de forma fácil e rápida através do uso de anotações. A proposta desta JSR é a validação dos dados presentes nas classes que modelam o domínio da aplicação, que comumente seguem o padrão JavaBeans. O que é mais interessante é que a Bean Validation API independe da camada da aplicação onde é usada e até da forma de programar. Ela pode ser usada tanto em aplicações web como desktop, além de não estar atrelada ao mecanismo de persistência usado. Enfim, pode ser usada nos mais diversos cenários.
A validação de dados sempre esteve presente em sistemas que recebem entrada de dados do usuário. Cada framework implementava um mecanismo proprietário para validar as informações, o que criava problemas de incompatibilidade e dificultava a integração.
Com o surgimento da JSR 303 foi estabelecida uma API padrão para validação, que é flexível o suficiente para ser utilizada pelos mais diversos tipos de frameworks. Além disso, a Bean Validation API possibilita a validação de dados nas classes do domínio da aplicação, que é mais simples do que quando o processo é feito por camada. Na validação por camada, é necessário verificar o mesmo dado diversas vezes (nas camadas de apresentação, negócio, persistência, etc.), a fim de garantir a consistência da informação. Ao validar os dados diretamente nas classes de domínio, o processo todo fica centralizado, uma vez que os objetos destas classes normalmente trafegam entre as camadas aplicação.
A implementação de referência da JSR 303 é o Hibernate Validator, que será explicado em detalhes no decorrer deste artigo.
Configurando o Hibernate Validator
Para trabalhar com a API é necessário utilizar a versão 5 do Java ou superior, já que o Hibernate Validator não é compatível com versões anteriores do JDK. A configuração da aplicação para usar a API é simples. O primeiro passo é fazer o download no site oficial do projeto, que pode ser consultado na seção de referências. A versão disponível até o momento da escrita deste artigo é a 4.1.0.
Após a descompactação do arquivo (que pode ser baixado nos formatos ZIP ou TGZ), basta adicionar os seguintes JARs no classpath da sua aplicação: hibernate-validator-4.1.0.Final.jar, log4j-1.2.14.jar, slf4j-api-1.5.6.jar, slf4j-log4j12-1.5.6.jar e validation-api-1.0.0.GA.jar. Todos eles fazem parte do arquivo que você baixou. Caso a sua aplicação use o Java 5 ao invés do 6, é necessário adicionar também os JARs da API JAXB: jaxb-api-2.2.jar e jaxb-impl-2.1.12.jar. Este conjunto de arquivos é o mínimo necessário para colocar o Hibernate Validator para funcionar.
Definindo restrições com o uso de annotations
As restrições são utilizadas para definir regras a respeito dos dados de um objeto. Você pode, por exemplo, definir que um determinado atributo não pode ser nulo ou que o valor de um atributo numérico deve pertencer a um intervalo bem definido. Quando o processo de validação dos dados é executado, é feita uma verificação para checar se os dados estão de acordo com as regras estabelecidas.
Quando é necessário adicionar restrições de validação no código, isto é feito através da utilização de annotations. O Hibernate Validator já possui um conjunto de annotations para validações mais comuns, embora a API possibilite que o programador faça customizações. A criação de restrições customizadas será abordada na sequência deste artigo.
Existem dois locais onde as restrições podem ser aplicadas. A primeira é diretamente no atributo da classe. Neste caso o Java acessa diretamente o atributo via reflexão a fim de fazer a validação. A Listagem 1 mostra um exemplo. A segunda forma de aplicação de restrições pode ser utilizada quando a classe segue a especificação de um JavaBean. Neste caso é possível usar a annotation no método getter do atributo. A Listagem 2 mostra como isto pode ser feito. Você deve escolher apenas uma das opções, já que se ambas forem usadas a validação será feita duas vezes.
Listagem 1. Usando a restrição @NotNull no atributo.
public class Aluno {
@NotNull
private String nome;
}
Listagem 2. Usando a restrição @NotNull no método getter.
public class Aluno {
@NotNull
public String getNome() {
return nome;
}
}
...