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

Redirect Spring MVC

Estou estudando por conta SpringMVC apos terminar o curso. Então configurei a aplicação e comecei a codar.

Logo no primeiro controller estou passando por um comportamento inesperado:

Esse meu controller é responsável pro inserir minhas "mercadorias" no banco, e apos feito isso, eu quero que ele retorne minha view "index", que tem uma lista de "mercadorias".

    @RequestMapping(name = "/", method = RequestMethod.POST)
    public ModelAndView form(Mercadoria mercadoria) {
        ModelAndView modelAndView = new ModelAndView("redirect:index");

        dao.cadastra(mercadoria);

        return modelAndView;
    }

o comportamento que eu não estou entendendo é:

apos preencher o formulario, clicando no botão enviar, acontece o insert no banco. So que ele n esta me mandando para onde eu queria/esperava! ele me manda para um localhost:8080/testeestudos/index

ou seja, retorna um 404

por que isso acontece ?

5 respostas

Oi Julio, tudo bem ?

Pelo que entendi, ele está executando corretamente.

Esse redirect está indo para onde você está pedindo.

Qual é o endereço que você quer que ele retorne ?

tenho dois controllers

@Controller
@RequestMapping("/")
public class HomeController {

    @Autowired
    private MercadoriaDao dao;

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView listar() {
        ModelAndView modelAndView = new ModelAndView("index");

        List<Mercadoria> listaMercadoria = dao.listaMercadoria();
        modelAndView.addObject("listaMercadorias", listaMercadoria);

        return modelAndView;
    }


}
@Controller
@RequestMapping("/cadastrar")
public class MercadoriaController {

    @Autowired
    private MercadoriaDao dao;

    @RequestMapping(method = RequestMethod.GET)
    public String cadastra() {
        return "formulario";
    }

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView form(Mercadoria mercadoria) {
        ModelAndView modelAndView = new ModelAndView("formulario");

        dao.cadastra(mercadoria);

        return modelAndView;
    }

}

apos executar o MercadoriaController.form() quero que ele faça um redirect para mesma pagina que o meu HomeController.listar() esta esta retornando.

No seu form você tem que fazer :

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView form(Mercadoria mercadoria) {
        ModelAndView modelAndView = new ModelAndView("redirect:/");

        dao.cadastra(mercadoria);

        return modelAndView;
    }

Imagino que seja isso que você quer

funcionou, mas eu sempre achei que eu deveria informar qual view que eu quero retornar, e não o caminho.

oque eu sempre entendi foi:

com o requestMapping eu informo qual caminho que aquele método atende, e retorno desse metodo que é acesso pelo requestMapping é a view que eu quero exibir.

ou eu estou errado ?

solução!

O retorno dos métodos geralmente vai ser qual é o caminho da view que você quer exibir.

Mas no caso do redirect, ele precisa saber aonde você vai bater, ou seja, onde ele vai precisar fazer a nova requisição.

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