Hibernate Validator: como validar objetos e ter mais controle sobre os dados

Aprenda neste artigo como melhorar a qualidade dos dados que sua aplicação necessita para um correto funcionamento.

Fique por dentro
Este artigo é útil por apresentar como expressar e validar regras existentes no domínio de negócio de uma aplicação. Para isso, aprenderemos de forma básica e simples os principais conceitos relativos ao Hibernate Validator, fazendo uma análise geral sobre seu funcionamento, como configurar um ambiente de desenvolvimento com Maven, Eclipse, MySQL e Tomcat para uso desta tecnologia e, em seguida, como desenvolver uma aplicação com JSF e o padrão arquitetural MVC que faz uso de seus recursos.

A validação de dados é uma tarefa bastante comum em sistemas onde a entrada de dados é feita principalmente pelo usuário. Em qualquer aplicação, receber dados sempre foi um grande problema, pois não há como prever todas as maneiras que o usuário utilizará para informar seus dados. Por exemplo, caso o campo que receberá uma data não especifique o formato esperado pela aplicação, não há como garantir que o usuário entrará com o dado no formato desejado, o que acaba se tornando um desafio aos programadores.

Diante disso, é necessário realizar o tratamento adequado de todas as informações que são enviadas para evitar que problemas inesperados venham a ocorrer durante o processamento, como exceções que interromperão a execução do sistema, problemas de integridade ou corrupção dos dados e também questões relacionadas à falha de segurança.

Cada informação passada para a aplicação possui um propósito. Assim, é natural que algumas regras sejam introduzidas com o intuito de controlar a interação entre o usuário e o sistema, garantindo deste modo a correta execução das regras de negócio. E com o intuito de garantir o cumprimento dessas regras que o conceito de validação foi implementado. Validar é determinar se os dados capturados pelo sistema seguem as regras lógicas definidas para manter a sua consistência.

Neste contexto, conseguir consolidar e implementar a validação usando uma solução de qualidade como o Hibernate Validator pode melhorar significativamente a confiabilidade do software, especialmente ao longo do tempo, e torná-lo mais amigável ao usuário.

Considerando que as políticas de validação não estruturadas e não controladas vão levar ao aumento dos custos de suporte e manutenção, uma estratégia de validação consolidada pode minimizar significativamente o efeito cascata de mudanças para sua base de código. Além disso, a camada de validação também passa a ser uma ferramenta muito útil durante o processo de depuração, ajudando a localizar defeitos que comprometem o bom funcionamento da aplicação.

Engajado nesta causa, o Hibernate Validator é um projeto open source conduzido pela empresa Red Hat que permite a validação dos dados, presentes nas classes que modelam o domínio da aplicação, em qualquer arquitetura (Web, Desktop, etc.) e em tempo de execução. A motivação para a utilização dessa biblioteca é poder validar os dados diretamente no domínio da aplicação, em vez de realizar esse processo por camadas. Dessa forma, é possível validar campos numéricos, definir se datas informadas serão obrigatoriamente maiores ou menores que a data atual, verificar se o campo pode ser vazio ou não diretamente nas classes de domínio de maneira centralizada e flexível, mantendo o código claro e enxuto.

A partir disso, ao longo desse artigo abordaremos os principais conceitos e características do Hibernate Validator, e veremos como desenvolver um sistema de cadastro de projetos considerando como um dos seus principais requisitos não funcionais a confiabilidade do sistema. Para tanto, serão empregados, além do Validator, a linguagem de programação Java, o ambiente de desenvolvimento Eclipse integrado ao Maven, o sistema de gerenciamento de banco de dados MySQL, o framework JSF e o container web Tomcat. Ademais, o Hibernate será usado como solução integrante da camada de persistência, viabilizando a interface entre a aplicação e o MySQL.

Hibernate Validator

O Hibernate é um framework de mapeamento objeto relacional muito popular entre os desenvolvedores Java. Distribuído sob a licença LGPL, foi criado por Gavin King em 2001, sendo atualmente o framework de persistência de dados mais utilizado. Segundo a documentação oficial: “o Hibernate pretende retirar do desenvolvedor cerca de 95% das tarefas mais comuns de persistência de dados”.

Sua principal característica é a transformação de classes Java em representações de tabelas da base de dados (e dos tipos de dados Java para os da SQL). O Hibernate gera os comandos SQL e libera o desenvolvedor do trabalho manual de transformação, mantendo o programa portável para quaisquer bancos de dados SQL.

O Hibernate Validator, por sua vez, é a implementação de referência da JSR 303 – Bean Validation API. Disponibilizada em dezembro de 2009, a partir da especificação do Java EE 6, na qual foi introduzida a especificação Bean Validation 1.0, o objetivo principal dessa API é permitir a validação dos dados de forma fácil e rápida, através do uso de anotações e, de forma alternativa, utilizando arquivos XML na configuração.

Com o lançamento mais recente da plataforma Java EE, agora na versão 7, a JSR 349 foi divulgada, introduzindo a versão 1.1 da API de validação e trazendo novidades como:

Antes do surgimento dessa API, cada framework implementava um mecanismo proprietário para validar as informações, o que criava problemas de incompatibilidade e dificultava a integração com outros frameworks.

Com o surgimento dessa especificação, possibilitou-se 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 viabiliza a validação de dados nas classes do domínio da aplicação, processo esse que é mais simples do que quando é 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, conforme mostra a Figura 1. 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 da aplicação.

" [...] continue lendo...

Artigos relacionados