1
resposta

Exceção ao passar classe Produto como parametro

Na classe ProdutosController, ao criar o seguinte método e passar um Produto como parâmetro, vou na url casadocodigo/produtos/form, adiciono os dados do produto e ao clicar em cadastrar, uma exceção é lançada:

Exceção retornada

GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.casadocodigo.loja.models.Produto]: No default constructor found; nested exception is java.lang.NoSuchMethodException: br.com.casadocodigo.loja.models.Produto.<init>()] with root cause
java.lang.NoSuchMethodException: br.com.casadocodigo.loja.models.Produto.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getDeclaredConstructor(Class.java:2178)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:138)
...

ProdutosController.java

@Controller
public class ProdutosController {

    @RequestMapping("/produtos/form")
    public String form() {
        return "produtos/form";
    }

    @RequestMapping("/produtos")
    public String grava(Produto produto) {
        System.out.println(produto);
        return "ok";
    }
}

A classe Produto.java está da seguinte forma:

package br.com.casadocodigo.loja.models;

public class Produto {
    private String titulo;
    private String descricao;
    private int paginas;

    public Produto() {}

    public Produto(String titulo, String descricao, int paginas) {
        this.titulo = titulo;
        this.descricao = descricao;
        this.paginas = paginas;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public int getPaginas() {
        return paginas;
    }

    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }

    @Override
    public String toString() {
        return "Produto [titulo=" + titulo + ", descricao=" + descricao + ", paginas=" + paginas + "]";
    }

}

1 resposta

Oi bruno, boa tarde! A exceção acusa que não existe o construtor padrão na classe Produto: "No default constructor found".

Vi que a classe que você postou aqui possui o construtor padrão, mas verifique novamente para ter certeza.

Ou veja se a exceção que você pretendia postar é esta mesma ou se é outro erro que está acontecendo no momento do cadastro.

Aguardo resposta.