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

Erro 400 ao tentar acessar a pagina carrinho.

Ao clicar em comprar, após ter selecionado o tipo de preço do livro, apresenta o erro 400, apontando para Url http://localhost:9090/casadocodigo/carrinho/add. Conferi o método add, como itens, e não encontrei a causa.

package br.com.casadocodigo.loja.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.ModelAndView;

import br.com.casadocodigo.loja.Daos.ProdutoDao;
import br.com.casadocodigo.loja.models.CarrinhoCompras;
import br.com.casadocodigo.loja.models.CarrinhoItem;
import br.com.casadocodigo.loja.models.Produto;
import br.com.casadocodigo.loja.models.TipoPreco;

@RequestMapping("/carrinho")
@Controller
@Scope(value = WebApplicationContext.SCOPE_REQUEST)
public class CarrinhoComprasController {

    @Autowired
    private ProdutoDao produtoDao;

    @Autowired
    private CarrinhoCompras carrinho;

    @RequestMapping("/add")
    public ModelAndView add(Long produtoId, TipoPreco tipoPreco){
        ModelAndView modelAndView = new ModelAndView("redirect:/carrinho");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);
        carrinho.add(carrinhoItem);
        return modelAndView;
    }

    private CarrinhoItem criaItem(Long produtoId, TipoPreco tipoPreco) {
        Produto produto = produtoDao.find(produtoId);
        CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipoPreco);
        return carrinhoItem;
    }

    @RequestMapping(method=RequestMethod.GET) // vai acessar apenas com /itens
    public ModelAndView itens(){
        return new ModelAndView("carrinho/itens");
    }
}
2 respostas
solução!

Em geral, 400 indica que os parâmetros não foram enviados corretamente... O id ou o tipoPreco não foram enviados na requisição...

estou com o mesmo problema, antes gerava até erros de NullPointer consegui passar os valores, mas agora está com o mesmo erro 400

HTTP Status 400 -
type Status report
message
description The request sent by the client was syntactically incorrect.

se eu resubmeter na página com o erro, ger o erro e NullPointer por não ter passado os parametros na request. Não consegui entender por que na primeira requisição não deu certo.

o Código do Form detalhe

                <form action='<c:url value="/carrinho/add" />' method="POST" class="container">
                    <input type="hidden" value="${produto.id}" id="produtoId" name="produtoId" />
                    <ul id="variants" class="clearfix">
                        <c:forEach items="${produto.precos}" var="preco">
                              <li class="buy-option">
                                <input type="radio" name="tipoPreco" id="tipoPreco" class="variant-radio" value="${preco}" checked="checked"  />
                                <label class="variant-label">
                                      ${preco.tipo}
                                </label>
                                <small class="compare-at-price">R$ 39,90</small>
                                <p class="variant-price">${preco.valor}</p>
                              </li>
                        </c:forEach>           
                    </ul>
                    <button type="submit" class="submit-image icon-basket-alt" alt="Compre Agora" title="Compre Agora ${produto.titulo}!"></button>
                  </form>

Método Add do Controller CarrinhoComprasController

    @RequestMapping("/add")
    public ModelAndView add(Integer produtoId, TipoPreco tipoPreco){
        ModelAndView modelAndView = new ModelAndView("redirect:/carrinho");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);
        carrinho.add(carrinhoItem);
        return modelAndView;
    }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software