Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Bean Validation not Working (@NotBlank e @Valid)

Prezados, estou realmente travado nessa parte do curso. As anotações @NotBlank e @Valid, utilizadas para validar os dados inseridos nos atributos da classe RequisicaoNovoPedido e Validar no Controller respectivamente, não funcionam. Utilizei as anotações exatamente como ensinado pelo instrutor, porém parece que nada acontece. Segue a minha classe RequisicaoNovoPedido (utilizada para receber os dados do form, antes de ser instanciada a classe Pedido propriamente)

-------------------Código--------------------------------- import javax.validation.constraints.NotBlank;

public class RequisicaoNovoPedido { @NotBlank private String nomePedido; @NotBlank private String urlProduto; @NotBlank private String urlImagem; @NotBlank private String descricao; public String getNomePedido() { return nomePedido; }

public Pedido toPedido() { Pedido pedido = new Pedido();

    pedido.setDescricao(descricao);
    pedido.setNomeProduto(nomePedido);
    pedido.setUrlImagemExterna(urlImagem);
    pedido.setUrlProduto(urlProduto);
    return pedido;
}

} ---------------------------------Fim código------------------------- Agora, segue abaixo o trecho do código do controller>

import javax.validation.Valid;

@PostMapping("novo")    
public String novo(@Valid RequisicaoNovoPedido requisicaoNovoPedido, BindingResult result) {

    if(result.hasErrors()) {
        return ("pedido/formulario");
    }else {

    try {
        Pedido pedido = requisicaoNovoPedido.toPedido();
        pedidoRepository.save(pedido);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return "home";
    }
}

---------------------------Fim código--------------------

Pesquisei em alguns fóruns, e percebi a necessidade de incluir uma dependência, conforme abaixo: org.springframework.boot spring-boot-starter-validation

Porém, esta API não possui a Anotação @Valid e sim a @Validated. Indo além, a anotação @NotBlank dessa API está como deprecated e, mesmo a utilizando, o método hasErrors (da Interface BindingResults) simplesmente retorna false.

Alguém saberia resolver essa situação???

Veja, parece que algo recorrente> https://stackoverflow.com/questions/50017134/javax-validation-notblank-missing-validator

4 respostas

opa, boa noite, tenta essa dependencia aqui.

<dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-validation</artifactId> 
 </dependency>

Olá Flavio, eu inseri essa dependência no POM, porém não resolveu o problema. A título de curiosidade, eu substitui o java 11 pelo java 1.8 (no runtime do java facets) e tudo passou a funcionar corretamente, sem qualquer alteração no código. Sei que isso não é uma solução, porque eu simplesmente deixei de usar a versão mais nova do Java. Fica a curiosidade e o alerta... Esse tipo de anotações/validações aparentemente não funcionam no Java 11, pelo menos não da forma que foi mostrada no curso.

Vou continuar pesquisando, quando conseguir uma solução eu posto aqui.

solução!

A título de feedback... Só lembrei agora de atualizar esse post.

O problema estava entre a cadeira e o teclado...hehehe. Sem perceber eu coloquei a classe modelo em um package diferente do projeto. Apesar de fazer o import corretamente (e não apresentar warn ou erros) a controller do spring não "exergava" a classe modelo e, por isso, não funcionava. Apenas movi a classe e tudo passou a funcionar perfeitamente.