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 + "]";
}
}