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

404 ao comprar um item

Sempre que entro em detalhe, escolho o tipo de preço e clico em comprar, chego ao 404. Aparentemente n chega nem a reconhecer o CarrinhoController.

detalhe.jsp:

<form action='<c:url value="/carrinho/add"/>' method="post" class="container">
        <ul id="variants" class="clearfix">
            <input type="hidden" value="${produto.id }" name="produtoId" />
            <c:forEach items="${produto.precos }" var="preco">
              <li class="buy-option">
                <input type="radio" name="tipo" class="variant-radio" id="tipo" value="${preco.tipo }"  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>

CarrinhoComprasController:

package br.com.casadocodigo.loja.controllers;

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

import br.com.casadocodigo.loja.dao.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;

@Controller
@RequestMapping("/carrinho")
public class CarrinhoComprasController {

    @Autowired
    private ProdutoDAO produtoDAO;

    @Autowired
    private CarrinhoCompras carrinho;

    @RequestMapping("/add")
    public ModelAndView add(Integer produtoId, TipoPreco tipo) {
        System.out.println("Entrou aqui no carrinho/add");
        ModelAndView modelAndView = new ModelAndView("redirect:/produtos");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipo);

        carrinho.add(carrinhoItem);

        return modelAndView;
    }

    private CarrinhoItem criaItem(Integer produtoId, TipoPreco tipo) {
        Produto produto = produtoDAO.find(produtoId);
        CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipo);
        return carrinhoItem;
    }

}

AppWebConfig:

@EnableWebMvc
@ComponentScan(basePackageClasses= {HomeController.class, ProdutoDAO.class, FileSaver.class, CarrinhoCompras.class})
public class AppWebConfiguration extends WebMvcConfigurerAdapter{

Gostaria de ajuda como prosseguir.

6 respostas

Oi Felipe, tudo bem?

Aprece alguma mensagem no log de subida do servidor? A sua classe CarrinhoComprasController está no mesmo pacote do seu HomeController?

Abraço!

Bom dia, Joviane. Não aparece nada no console. E o log da página é:

HTTP Status 404 – Not Found
Type Status Report

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Apache Tomcat/8.5.28

E o CarrinhoComprasController está no mesmo pacote de HomeController sim.

Começo a achar q seja algum problema com o Tomcat. Estou utilizando o Tomcat 8.5, dentro deste servidor eu coloquei 2 projetos. O primeiro é a casa do código e o segundo é o projeto gerenciador, elaborado para atividades anteriores aqui na Alura.

No momento, quando tento acessar o casa do código recebo = HTTP Status 404 – Not Found

Porém ao acessar o gerenciador o servidor encontra o projeto.

Minha dependencia quanto a server é:

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>8.5.28</version>
        <scope>provided</scope>
    </dependency>
solução!

Oi Felipe,

Qualquer URL que você tenta acessar do projeto da casa do código dá erro de 404? Se sim então realmente é algum erro na configuração deste projeto. Se alguma URL estiver funcionando aí o problema talvez seja na configuração da classe específica.

Tenta fazer o build do projeto novamente pra ver se não ficou algum .class sem atualizar no seu projeto pois às vezes o Eclipse dá uns bugs...

Abraço!

Ah! Posta também o log de inicialização do Spring para este projeto da casa do código? Lá aparecem quais controllers foram identificados pelo Spring.

OBS: O ideal é tirar o outro projeto do servidor para vir o log somente do projeto da casa do código.

Abraço!

Obrigado pela sua atenção, Joviane. Depois de inúmeras tentativas nenhuma página mais do projeto era reconhecida. A solução q vc sugeriu de refazer a build do projeto resolveu todos os problemas q eu tinha, inclusive o de identificar o CarrinhoController.

Grato. Abraços.

Oi Felipe,

Acontece isto às vezes mesmo, parece que o Eclipse para de atualizar os .class no projeto e aí o build resolve.

Mistérios da vida hehehe mas que bom que conseguiu resolver!

Bons estudos!