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

Erro 404 ao tentar acessar o formulário de produtos

Olá boa noite! Segui os passos do exercício para criar o controller de produtos. Porém ao tentar acessar o caminho:http://localhost:8080/casadocodigo/produtos/form estou recebendo o seguinte erro: /casadocodigo/produtos/WEB-INF/views/produtos/form.jsp

Acredito que esteja esquecendo algum passo, pois o caminho que a aplicação está buscando o form está errado,. Poderiam me auxiliar?

Segue abaixo minhas classes:

package br.com.casadocodigo.loja.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ProdutosController {

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

}
package br.com.casadocodigo.loja.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import br.com.casadocodigo.loja.controllers.HomeController;

@Configuration
@EnableWebMvc
@ComponentScan(basePackageClasses={HomeController.class})
public class AppwebConfiguration {

    //indica onde está a view
    //gera uma classe gerenciada pelo spring
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

}
package br.com.casadocodigo.loja.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//criação do controller do Spring

//tem que configurar primeiro as dependências no maven para reconhecer as annotations do spring
@Controller
public class HomeController {

    @RequestMapping("/")
    public String index(){
        System.out.println("Entrando na home da CDC");
        return "home";
    }

}
package br.com.casadocodigo.loja.conf;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        //retorna a classe que irá fazer a configuração
        return new Class[]{AppwebConfiguration.class};
    }

    @Override
    //mapeia a url que será atendida
    protected String[] getServletMappings() {
        //irá atender a /
        return new String[]{"/"};
    }


}
8 respostas

Não esta errando a url digitada?

Estou acessando essa url: http://localhost:8080/casadocodigo/produtos/form

Porém o erro que recebo é esse:HTTP Status 404 - /casadocodigo/produtos/WEB-INF/views/produtos/form.jsp

Achei estranho o caminho que a aplicação está tentando buscar o form, que é diferente da url digitada,

Não entendo de spring ainda mais pelo que to vendo nessa parte do seu código

 @RequestMapping("/produtos/form")

você ta passando o map produtos/form tenta passar só isso na url para ver, ficando assim. http://localhost:8080/produtos/form

Boa noite!Infelizmente não resolveu o problema....Ainda estou estacionado aqui. O complicado é que eu consigo mapear para "/produtos" mas se coloco "/produtos/form" não funciona.

Tiago, tive o mesmo problema, se eu mapeio colocando o /form, ele apresenta o mesmo erro que você descreveu. Eu resolvi retirando o /form e definindo que o método form é do tipo GET: @RequestMapping(method = RequestMethod.GET) public String form() { return "/products/form"; }

E coloquei mapeando meu controller dessa forma:

@Controller @RequestMapping("/products") public class ProductsController

Não é a solução definitiva mas por enquanto é a solução que funcionou comigo.

solução!

Oi Tiago,

O problema não é na URL que você está tentando acessar e sim o caminho onde ele está tentando buscar a JSP como você mesmo tinha dito.

O prefixo do caminho é que está errado, coloca:

resolver.setPrefix("/WEB-INF/views/");

ao invés de

resolver.setPrefix("WEB-INF/views/");

Faltou a "\" inicial.

Abraço!

Oi Joviane,

Essa dica resolveu o meu problema. Muito obrigado!

Oi Joviane, obrigado pela ajuda! Resolveu!