Estou tentanto criar um formulario onde cadastro um produto para um cliente ja existente, o problema é que quando tento cadastrar o produto da o seguinte erro:
HTTP Status 400 – Bad Request
Type Status Report
Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Apache Tomcat/9.0.21
Segue meu form.jsp do produto
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<%@ page isELIgnored="false"%>
<meta charset="ISO-8859-1">
<title>Controle de Estoque</title>
</head>
<body>
<form action="/controle-de-estoque/produtos"
method="POST">
<div>
<label>Referência:</label> <input type="text" name="referencia">
</div>
<div>
<label>Descrição:</label>
<textarea rows="3" cols="20" name="descricao"></textarea>
</div>
<div>
<label>Tamanho:</label> <input type="text" name="tamanho">
</div>
<div>
<label>cor:</label> <input type="text" name="cor">
</div>
<div>
<label>Estoque:</label> <input type="text" name="estoque">
</div>
<div>
<input type="text" name="cliente" value="${cliente}" />
</div>
<button type="submit">Cadastrar</button>
</form>
</body>
</html>
A classe ProdutoController
@Controller
@RequestMapping("/produtos")
public class ProdutoController {
@Autowired
private ClienteDao clienteDao;
@Autowired
private ProdutoDao produtoDao;
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ModelAndView listaProdutos(@PathVariable Integer id) {
ModelAndView modelAndView = new ModelAndView("produtos/lista");
Cliente cliente = clienteDao.getCliente(id);
modelAndView.addObject("cliente", cliente);
return modelAndView;
}
@RequestMapping(value = "/{id}/form")
public ModelAndView form(@PathVariable Integer id) {
ModelAndView modelAndView = new ModelAndView("produtos/form");
Cliente cliente = clienteDao.getCliente(id);
List<Produto> produtos = cliente.getProdutos();
modelAndView.addObject("produtos", produtos);
modelAndView.addObject("cliente", cliente);
return modelAndView;
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView gravarProduto(Produto produto) {
produtoDao.persist(produto);
return new ModelAndView("redirect:/produtos") ;
}
}
A classe Cliente
@Entity
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
@OneToMany(mappedBy = "cliente")
private List<Produto> produtos;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Produto> getProdutos() {
return produtos;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
@Override
public String toString() {
return "Cliente [nome=" + nome + "]";
}
}
A classe Produto
@Entity
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String referencia;
private String descricao;
private String tamanho;
private String cor;
private Integer estoque;
@ManyToOne
private Cliente cliente;
public String getReferencia() {
return referencia;
}
public void setReferencia(String referencia) {
this.referencia = referencia;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getTamanho() {
return tamanho;
}
public void setTamanho(String tamanho) {
this.tamanho = tamanho;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public String getCor() {
return cor;
}
public void setCor(String cor) {
this.cor = cor;
}
public Integer getEstoque() {
return estoque;
}
public void setEstoque(Integer estoque) {
this.estoque = estoque;
}
}