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

Erro 403 - Spring MVC I

Olá amigos, boa tarde. Estou quebrando a cabeça e não consigo encontrar o erro... Estou tentando criar o médoto em Pedido Controller quando o usuário clica em cadastrar novo pedido... O form está setado para o método post e estou trabalhando com o @PostMapping para o listener... Mas toda hora que tento cadastrar recebo o erro 403.. Não consigo encontrar o que está errado no código... se puderem me ajudar pessoal...

  <div class="container">
            <div class="alert alert-secondary mb-0">
                <h1 class="display-4">Novo Pedido</h1>
            </div>

            <form action="/pedido/novo" method="POST">
                <div>
                    <label for="nomeProduto">Produto</label>
                    <input name="nomeProduto" placeholder="nome do produto"/>
                    <small>Informa qual o nome do produto.</small>
                </div>
                <div>
                    <label for="urlProduto">Url</label>
                    <input name="urlProduto" placeholder="url do produto"/>
                    <small>Procure em um site o produto que você deseja e cole a url da página aqui.</small>
                </div>
                <div>
                    <label for="urlImagem">Imagem</label>
                    <input name="urlImagem" placeholder="url da imagem"/>
                    <small>Copie a url de uma boa imagem do produto e cole aqui para ajudar a conseguir compradores.</small>
                </div>
                <div>
                    <label for="descricao">Descrição</label>
                    <textarea name="descricao" placeholder="Adicione detalhes importantes para ajudar o comprador."></textarea>
                </div>
                <button type="submit">Cadastrar</button>
            </form>
        </div>
@Controller()
@RequestMapping("pedido")
public class PedidoController {

    @Autowired
    private PedidoRepository pedidoRepository;

    @GetMapping("formulario")
    public String formulario() {
        return "Pedido/formulario";

    }

    @PostMapping("novo")
    public String novo(RequisicaoNovoPedido requisicao) {

        Pedido pedido = requisicao.toPedido();
        pedidoRepository.save(pedido);
        return "home";

    }
}
4 respostas

Não sei se esse é o problema, pois sou novo no Spring. Mas quando eu faço meus formulários, eu utilizo a anotação @RequestParam para receber os valores dos inputs.

Ficaria assim:

@PostMapping("novo")
public String novo(@RequestParam String nomeProduto, @RequestParam String urlProduto, @RequestParam String urlImagem, @RequestParam String descricao) {

    Pedido pedido = new Pedido(nomeProduto, urlProduto, urlImagem, descricao);
    pedidoRepository.save(pedido);
    return "home";

}

Bom dia brother! Primeiramente, me desculpe em demorar a te responder irmão!!! Cara, fiz o que vc sugeriu mas o erro persiste, eu fiz um teste e coloquei o form com método GET e funcionou... Não sei realmente o que pode estar havendo de erro com o POST uma vez que não posso enviar todas essas informações via GET. Ainda não consegui solucionar o danado do problema..rsrsrs

solução!

Bom dia! Agora sim nós vamos solucionar esse problema.

  • altere o action para o padrão thymeleaf
<form th:action="@{/pedido/novo}" method="POST">
  • altere o button para input, pois este é mais apropriado para disparar o evento do form
<input type="submit" value="Cadastrar" />
  • cuidado com a rota

  • a classe RequisicaoNovoPedido deve conter os mesmo nome dos names da página HTML

public class RequisicaoNovoProduto {

    private String nomeProduto;
    private String urlProduto;
    private String urlImagem;
    private String descricao;

    public String getNomeProduto() {
        return nomeProduto;
    }
    public void setNomeProduto(String nomeProduto) {
        this.nomeProduto = nomeProduto;
    }
    public String getUrlProduto() {
        return urlProduto;
    }
    public void setUrlProduto(String urlProduto) {
        this.urlProduto = urlProduto;
    }
    public String getUrlImagem() {
        return urlImagem;
    }
    public void setUrlImagem(String urlImagem) {
        this.urlImagem = urlImagem;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }    
}

Booooom dia meu brother!!! Rapaz, o código do action no padrão thymeleaf funcionou irmão!!! Muito, mas muito obrigado mesmo cara!!! Por algum motivo, quando eu chamava o POST em meu Controller não estava havendo essa permissão que quando fiz chamando o thymeleaf funcionou... Valeu mesmo meu amigo!!