Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Annotation @NotBlank não está sendo validada no Controller

Não estou conseguindo fazer a validação da requisição no controller, o metódo hasErros() está sempre retornando false.

Controller:

package br.com.alura.mudi.controller;





import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.alura.mudi.dto.RequisicaoNovoPedido;
import br.com.alura.mudi.model.Pedido;
import br.com.alura.mudi.repository.PedidoRepository;

@Controller
@RequestMapping("pedido")
public class PedidoController {

    @Autowired
    private PedidoRepository pedidoRepository;

    @GetMapping("formulario")
    public String formulario() {
        return "pedido/formulario";
    }

    @PostMapping("novo")
    public String novo(@Valid RequisicaoNovoPedido requisicao, BindingResult result) {
        System.out.println(result.hasErrors());
        if(result.hasErrors()) {
            return "pedido/formulario";
        }
        Pedido pedido = requisicao.toPedido();
        pedidoRepository.save(pedido);
        return "home";
    }

}

e aqui a classe DTO:

package br.com.alura.mudi.dto;




import javax.validation.constraints.NotBlank;

import br.com.alura.mudi.model.Pedido;

public class RequisicaoNovoPedido {
    @NotBlank
    private String nomeProduto;
    @NotBlank 
    private String urlProduto;
    @NotBlank 
    private String urlImagem;
    private String descricao;

    public String getNomeProduto() {
        return nomeProduto;
    }
    public void setNomeProduto(String nomeProduto) {
        this.nomeProduto = nomeProduto;
    }
    public String getUrlProduto() {
        return urlProduto;
    }
    public void setUrlProduto(String urlProduto) {
        this.urlProduto = urlProduto;
    }
    public String getUrlImagem() {
        return urlImagem;
    }
    public void setUrlImagem(String urlImagem) {
        this.urlImagem = urlImagem;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public Pedido toPedido() {
        return new Pedido(nomeProduto, urlProduto, urlImagem, descricao);
    }

}

Estou usando a versão 2.5.5 do Spring e também já adicionei a depencia no pom.xml

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

Alguma ideia de como resolver?

1 resposta
solução!

Consegui resolver o problema trocando a annotation @NotBlank por @NotEmpty

package br.com.alura.mudi.dto;




import javax.validation.constraints.NotEmpty;

import br.com.alura.mudi.model.Pedido;

public class RequisicaoNovoPedido {
    @NotEmpty
    private String nomeProduto;
    @NotEmpty 
    private String urlProduto;
    @NotEmpty 
    private String urlImagem;
    private String descricao;

    public String getNomeProduto() {
        return nomeProduto;
    }
    public void setNomeProduto(String nomeProduto) {
        this.nomeProduto = nomeProduto;
    }
    public String getUrlProduto() {
        return urlProduto;
    }
    public void setUrlProduto(String urlProduto) {
        this.urlProduto = urlProduto;
    }
    public String getUrlImagem() {
        return urlImagem;
    }
    public void setUrlImagem(String urlImagem) {
        this.urlImagem = urlImagem;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public Pedido toPedido() {
        return new Pedido(nomeProduto, urlProduto, urlImagem, descricao);
    }

}