2
respostas

Validação no Spring MVC

No curso a validação é feita implementando uma Interface do Spring "Validator" . Usando também o método:

    @InitBinder
    public void InitBinder(WebDataBinder binder) {
        binder.addValidators(new ProdutoValidation());
    }

Utilizando somente o método abaixo a validação é feita nas anotações da classe que vai ser persistida no banco, neste caso "Produto". Por exemplo: @NotNull.

Qual o motivo de fazer a validação utilizando a Interface Validator com esse InitBinder?

@RequestMapping(method = RequestMethod.POST)
    public ModelAndView grava(@Valid Produto produto, BindingResult bindingResult, RedirectAttributes redirectAttributes) {

        if(bindingResult.hasErrors()) {
            return form();
        }
        produtoDAO.gravar(produto);
        redirectAttributes.addFlashAttribute("sucesso","Produto cadastrado com sucesso!");

        return new ModelAndView("redirect:produtos");
    }
2 respostas

Oi Matias

O Initbinder entra em cena se você deseja personalizar a solicitação que está sendo enviada para o seu controller. Pode ser usado no controle e na formatação de toda e qualquer solicitação que vem da tela. Essa anotação é usada como um pré-processador para cada solicitação que chega ao controlador.

Acho que não fui claro, ainda estou com a dúvida.

o @NotNull foi apenas um exemplo, veja que:

@NotNull
    @Size(min = 3, message = "{titulo.size}")
    private String titulo;

e configurar a mensagem no arquivo properties funciona sem InitBinder e a Interface Validator.

A mensagem foi personalizada, e na Entity que fica até melhor porque se passar alguma mensagem nessa implementação de validation e pegar na Entity, não vai passar e não vai aparecer a mensagem a menos que esteja explícita lá com:

@Size(message = "O campo deve ter no mínimo 5 caracteres")

Se tá usando Hibernate, a melhor opção é a validação dele. Não é isso?