JSR-371 ( MVC 1.0 ) — Validação

Logo_MVC_www_cmyk

Muita coisa mudou na SPEC desde no meu último post sobre o tema, se não sabe do que estou falando, veja o post anterior aqui para montar o projeto para esse post.

Uma dessas mudanças é era que originalmente a mesma só funcionava com uma versão especifica do Glassfish/Payara por causa do Jersey na qual a spec foi construída. Pois bem, atualmente esse problema foi resolvido e podemos utilizar também com Wildfly através de um módulo chamado Ozark-RestEasy e um chamado Ozark-Jersey para GlassFish/Payara, desta maneira não ficamos agarrados somente com Jersey .

Neste post veremos rapidamente como fazemos validações com a SPEC e vamos roda-la utilizando o Payara-Micro e Wildfly-Swarm ( farei um post sobre isso em breve) com seus respectivos módulos .

Maven Dependencies

crie um projeto maven e configure o pom.xml da seguinte forma :

Criando as Classes

Vamos inicia pela a classe application.

Esta classe simplesmente inicia a nossa aplicação, para que funcione a validação corretamente no Jersey devemos adicionar um pouco mais de código como pode ser visto abaixo :

Na nossa classe modelo sera algo bem simples com dois atributos nome e e-mail juntamente com as anotações do Bean Validation/Hibernate Validation :

aqui a única novidade é a anotação @MvcBinding , que serve para habilitar as regras de vinculação específicas do MVC, para quando uma validação falhar não resulte em uma ConstraintViolationException. Em vez disto a correspondente ConstraintViolation é armazenada em uma instancia do BindingResult com escopo de solicitação que pode ser injetada no controlador.

Isso permite que o controlador manipule o erro ao invés de confiar em um mecanismo global de tratamento de erros, como um ExceptionMapper.

Vejamos como fica nosso controlador para o tratamento de erros de validação :

Aqui precisamos injetar o nosso BindingResult e adicionar algumas configurações para que ocorra o tratamento de erros. Alem de injetar o BindingResult, precisamos também anotar nosso método com @ValidateOnExecution(type = ExecutableType.NONE) , que de acordo com a SPEC , ela é necessária para garantir que o CDI e BV não abortem a invocação ao detectar uma violação. Assim, para garantir a semântica correta, a validação deve ser realizada pelo JAX-RS implementação antes do chamado método.

Para verificarmos os erros chamamos o método isFailed() que retorna TRUE se encontrar erros durante a validação.

Feito isso passamos para o para próxima instrução para pegarmos as mensagens de erros e exibir para usuário através da chamado getAllValidationErrors() que recuperar todos os erros de validação que ocorrer, fazemos um map para obter somente as mensagens de erros através da classe ValidationError do MVC , logo depois coletamos e juntamos com uma tag. Depois passo a minha variável para ser exibida na minha view através do Models que faz a ligação entre meu modelo e minha pagina .

Agora em nossa pagina JSP fica da seguinte forma :

Agora bastamos rodar nossa aplicação com os seguinte comandos :

Payara-Micro :

mvn clean -P payara payara-micro:bundle && mvn -P payara payara-micro:start

bastando acessar a URL que sera exibida no terminal pronto .

Wildfly-Swarm :

mvn clean package -P wildfly && cd target/ && java -jar *.jar

bastando acessar a URL http://localhost:8080

error

Bem isso é tudo, aqui aprendemos como fazer validação utilizado a api MVC 1.0 , espero que gostem, o código pode se encontrado aqui e uma demo rodando no Heroku com Wildfly-Swarm .

Atualmente a SPEC esta em Public Review e também estão movendo para Fundação Eclipse sobre o Projeto EE4J.

Sinta-se livre para se juntar à nossa lista de discussão e nos informar o que você acha. Você pode publicar suas opiniões na lista ou registrar um problema no rastreador de problemas.

REFERÊNCIAS