Ошибка 400 (неверный запрос) во время запроса POST - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь отправить на мой сервер запрос POST из моего приложения реаги , но, тем не менее, я получаю ошибку status 400 Bad Request . Исключение составляет :

"org.springframework.http.converter.HttpMessageNotReadableException".

Сообщение об ошибке: :

"Ошибка синтаксического анализа JSON: Невозможно десериализовать экземпляр java.util.LinkedHashMap из токена START_ARRAY; вложенное исключение - com.fasterxml.jackson.databind.JsonMappingException: Невозможно десериализовать экземпляр java.util.LinkedHashMap из токена START_ARRAY \ n на [Source: java.io.PushbackInputStream@6a188b06; строка: 1, столбец: 1] "

Я пытался протестировать API с помощью POSTMAN но я все еще получаю ту же ошибку.

@PostMapping("/cart")
public Cart create(@RequestBody CartRequest cartRequest){
  return cartRepository.save(new Cart(0,cartRequest.getProductname()));
}

Мой класс моделей

public class CartRequest {
String productname;

public CartRequest(int productid, String productname) {
    this.productname = productname;
}


public String getProductname() {
    return productname;
}

public void setProductname(String productname) {
    this.productname = productname;
}

@Override
public String toString() {
    return "CartRequest{" +
            ", productname='" + productname + '\'' +
            '}';
}
}

Класс хранилища следующий

public interface CartRespository extends JpaRepository<Cart, Integer> {
    }

Код запроса

import React, { Component } from "react";
import axios from 'axios';
import NavBar from "./navbar";
export default class Products extends Component {
state = {
    isLoading: true,
    groups: [],
};

constructor(props){
    super(props);
    {
         this.add = this.add.bind(this);
    }
}
add(id, name) {
    axios({
    method: 'post',
    url: '/api/cart',
    body: {
      productid: id,
      productname: name
    }
  });
}

async componentDidMount() {
    const response = await fetch('api/product');
    const body = await response.json();
    this.setState({ groups: body, isLoading: false });
}

Кнопка, отправляющая запросы, выглядит следующим образом:

{this.state.groups.map(group => <button key={group.id} onClick={() => this.add(group.productid, group.name)} className="flex-c-m size1 bg4 bo-rad-23 hov1 s-text1 trans-0-4">Add to Cart</button>)}

Я пытаюсь получить информацию из продукта и добавить ее ккорзина.

Информация о товаре hкак было получено с помощью запроса GET .

1 Ответ

0 голосов
/ 24 февраля 2019

Сделайте так, чтобы метод вашего контроллера выглядел следующим образом:

@PostMapping("/cart")
public Cart create(@RequestBody Map<Integer, Integer> body){
    int productid = body.get("productid");
    String productname=body.get("productname");

    return cartRepository.save(new Cart(productid, productname));
}

Кстати, вы можете получить свой json как модель, а не как карту.Вам лучше создать новый класс модели - CartRequest с одним полем на данный момент - productname и принять модель taht в контроллере

@PostMapping("/cart")
public Cart create(@RequestBody CartRequest cartRequest){ 
  return cartRepository.save(new Cart(0, cartRequest.getProductname()));
}

Как видите, я не говорил включать productid поле в модели.Это потому, что у вашей сущности не должно быть идентификатора, когда она сохраняется в ORM (например, в спящем режиме)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...