Spring Rest Post Request z jednym parametrem

Spring Rest Post Request z jednym parametrem
JD
  • Rejestracja:około 19 lat
  • Ostatnio:dzień
0

błąd jaki otrzymuję
Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryRgRatimdDi8qF1jN;charset=UTF-8' not supported]

robiąc coś takiego na froncie

Kopiuj
    confirmOrder() {
      const formData = new FormData();
      formData.append("id", this.orderElements.items[0].orderId);
      
      ApiService.post(
          "/order-status", 
          formData,
          {
            headers: { "Content-Type": "application/json" }
          } // bez tego ten sam błąd  
          ).then(() => {      
            this.$refs.orderDetailModal.hide();
            this.getOrders();
          });
    },

endpoint

Kopiuj
    @PostMapping("/order-status")
    public void updateStatus(@RequestBody Integer id) {

        Order order = orderRepository.findById(id).orElse(null);

        if(order != null)
        {
            order.setStatus(Order.Status.CONFIRMED);
            orderRepository.save(order);
        }
    }

nigdzie multiparta nie mam

edytowany 1x, ostatnio: john_doe
szatkus
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 3 lata
  • Postów:227
0

W Spingu to chyba metoda nie może po prostu zwracać voida nie robiąc czegoś?

W internecie podpowiadają, żeby dodać adnotację @ResponseStatus(HttpStatus.NO_CONTENT)

Edit: wróć! Żeby to miało ręce i nogi to powinieneś raczej zmienić typ metody właśnie na HttpStatus i zwracać adekwatny w zależności od wyniku operacji.

Jest HttpStatus.CREATED, który by tu ładnie pasował.

Edit numer 2: poza wygląda na to, że używasz Optionala lub czegoś podobnego, więc wypadałoby to obsłużyć jakoś ładnie lambdami, a nie .orElse(null); :>


𐤃𐤐𐤀
edytowany 3x, ostatnio: szatkus
Charles_Ray
Może zwracać voida, wcale nie musi zwracać statusu. Domyślnie zwracany jest OK
szatkus
@Charles_Ray: ach, zafiksowałem się na zwrotce i nie zauważyłem. Chociaż sam integer (a konkretnie number) jest poprawnym JSONem, pewnie się wywala dlatego, że wysyła FormData i Spring próbuje to zrzutować na inta.
Charles_Ray
Ok ale jak ustawia content type, to Spring nie powinien tego parsowac jako multipart
szatkus
Jeśli użył FormData to przeglądarka to w ten sposób zakoduje w ciele zapytania.
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 7 godzin
  • Postów:1875
1

Integer nie jest poprawnym jsonem, opakuj to w obiekt. Content-Type na application/json po stronie klienta - jak najbardziej.

Metoda może zostać jak najbardziej voidowa, oznacza to tyle, że domyślnie zwrócisz 200 OK.


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
M9
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:42
0
Kopiuj
 headers: { "Content-Type": "application/json" }

"Accept", a ni "Content-Type"!

JD
  • Rejestracja:około 19 lat
  • Ostatnio:dzień
0

generalnie pomogło przestawienie z @RequestBody na @RequestParam

M9
no tak bo usunąłeś body z którym nie wysyłałeś nagłówka "Accept"
M9
nawet nie wpisałeś co konsumuje, jeżeli apke chcesz rozwijać to warto zacząć body obsługiwać poprawnie
M9
najlepiej zrobić to poprawnie REST'owo i zrobić @PatchMapping id jako PathVariable i status jako body

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.