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

Get e Post no Spring

Estou fazendo o curso de Spring aqui e me ocorreu uma duvida: nos exemplos aprendemos a inserir e listar dados com get e post para uma controller, mas se eu tiver um crud completo na mesma controler? pois se colocar dois metodos que recebem no @RequestMapping(method=RequestMethod.POST) ou GET ele da erro de dulpicação, nesse caso como consigo ter as quatro operações na mesma controller? Eu até consegui fazer mas para que uma funcione tenho que comentar a outra

8 respostas

Oi Diego,

só para eu entender, o Spring dá esse erro de duplicação na hora de subir?

abs

Sim logo q digito a url ele da erro 500 ambiguos

Oi Diego,

isso deve funcionar. vc pode usar a mesma uri, diferenciando entre POST e GET, por exemplo:

@Controller
public class OlaMundoController {

    @RequestMapping(value = "/olaMundoSpring", method={RequestMethod.GET})
    public String executeGET () {
        System.out.println("Executando a lógica com Spring MVC GET");
        return "ok";
    }

    @RequestMapping(value = "/olaMundoSpring", method={RequestMethod.POST})
    public String executePOST() {
        System.out.println("Executando a lógica com Spring MVC POST");
        return "ok";
    } 
}

Funciona corretamente.

abs

esse é o codigo da minha controller tenho essas tres operações por enquanto, quando tento acessar desse jeito q eu modifiquei com o value ele da 405 - Request method 'POST' not supported

@RequestMapping(value = "/produtos/form", method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes) {
        if (produto.getTitulo() == null || produto.getTitulo().isEmpty()) {
            return form();
        }

        produtoDAO.gravar(produto);
        redirectAttributes.addFlashAttribute("sucesso", "Produto Cadastrado com Sucesso");

        return new ModelAndView("redirect:produtos");

    }

    @RequestMapping(value = "/produtos/excluir", method = RequestMethod.POST)
    public ModelAndView excluir(@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes) {

        if (result.hasErrors()) {
            return excluir();
        }

        produtoDAO.consultarPorId(produto.getId());
        produtoDAO.excluir(produto);
        return new ModelAndView("redirect:excluir");
    }

    @RequestMapping(value = "/produtos/id", method = RequestMethod.POST)
    public ModelAndView listandoPorId(Produto produto) {

        List<Produto> produtos = produtoDAO.consultarPorId(produto.getId());
        ModelAndView modelAndView = new ModelAndView("/produtos/id");
        modelAndView.addObject("produtos", produtos);
        return modelAndView;

    }

Oi Diego,

o codigo parece ok. Tem certeza que está chamando um desses URI?

abs

Quando digito localhost:8080/massivo/produtos/form ele da exatamente esse erro em vez d entrar no form.jsp

solução!

Oi Diego,

Quando vc digite a URI diretamente no navegador será enviado um HTTP GET.

Pelo que entendi, vc gostaria de ver o formulário para cadastrar um produto, certo?

No entanto , olhando no seu código, "produtos/form" nao mostra o form e sim grava o produto (eu acho que a URI deve ser produtos/gravar e não produtos/form).

Agora basta descobrir como realmente chamar o formulário :)

abs

Obrigado nico vou fazer esse teste pela manha.