1
resposta

requisição post com o axios retorna status 403

Nessa aula utilizamos o método post pra criar as ofertas, mas pra mim sempre dá o status 403 - Forbidden Meu arquivo html

<!DOCTYPE html>
<html lang="pt-br" xmlns="http://www.w3.org/1999/html">
<head th:replace="~{base :: head}"></head>
    <body onload="onLoad()">
    <div th:replace="~{base :: logo}"></div>
    <div class="container" id="ofertas">
        <div th:replace="~{base :: titulo('Faça sua Oferta')}"></div>

        <div class="card mt-3 mb-3" v-for="pedido in pedidos">

            <div class="card-header alert-dark">{{pedido.nomeProduto}}</div>

            <div class="card-body">
                <div class="row">
                    <div class="col-12 col-sm-8 mb-3">
                        <div>Produto</div>
                            <div><a v-bind:href="pedido.urlProduto">{{pedido.nomeProduto}}</a></div>

                        <div>Descrição</div>
                        <div>
                            <textarea disabled class="form-control">{{pedido.descricao}}</textarea>
                        </div>
                        <div class="row mt-3">
                            <div class="col-md-5">Valor:<input class="form-control" v-model="pedido.valorNegociado"/></div>
                            <div class="col-md-7">Data da entrega:<input class="form-control" v-model="pedido.dataEntrega"/>
                        </div>
                        <div class="mt-2">
                            <div>Comentário:</div>
                            <div>
                                <textarea class="form-control" v-model="pedido.comentario"></textarea>
                            </div>
                        </div>
                    </div>
                        <button v-if="pedido.ofertaEnviada" class="btn btn-success mt-3">Oferta Enviada</button>
                        <button v-else v-on:click="enviarOferta(pedido)" class="btn btn-primary mt-3">Enviar Oferta</button>
                    </div>
                    <div class="col-12 col-sm-4">
                        <div>
                            <img class="img-thumbnail" v-bind:src="pedido.urlImagem">
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script>
        function onLoad() {
            var app = new Vue({
                el: '#ofertas',
                data: {
                    pedidos: []
                },
                mounted() {
                    axios
                        .get('http://localhost:8081/api/pedidos/aguardando')
                        .then(response => {
                            response.data.forEach(pedido => pedido.ofertaEnviada = false)
                            this.pedidos = response.data
                        })
                },
                methods: {
                    enviarOferta: function (pedido) {
                        console.log(pedido);
                        axios.post('http://localhost:8081/api/ofertas', {
                            pedidoId: pedido.id,
                            valor: pedido.valorNegociado,
                            dataEntrega: pedido.dataEntrega,
                            comentario: pedido.comentario
                        })
                        .then(response => pedido.ofertaEnviada = true)
                        .catch((err) => console.log(err));
                    }
                }
            });
        }
    </script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    </body>
</html>

e meu controller

package br.com.victor.mudiSecurity.api;

import br.com.victor.mudiSecurity.dto.*;
import br.com.victor.mudiSecurity.model.*;
import br.com.victor.mudiSecurity.repository.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.web.bind.annotation.*;

import java.util.*;

@RestController
@RequestMapping("api/ofertas")
public class OfertasRest {

    @Autowired
    PedidoRepository pedidoRepository;

    @PostMapping
    public Oferta criaOferta(@RequestBody RequisicaoNovaOferta requisicaoNovaOferta) {

        Optional<Pedido> pedidoBuscado = pedidoRepository.findById(requisicaoNovaOferta.getPedidoId());
        if (!pedidoBuscado.isPresent()) {
            return null;
        }

        Pedido pedido = pedidoBuscado.get();
        Oferta nova = requisicaoNovaOferta.toOferta();

        nova.setPedido(pedido);
        pedido.getOfertas().add(nova);
        pedidoRepository.save(pedido);

        return nova;
    }

}
1 resposta
O post foi fechado por inatividade. Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!