繁体   English   中英

POST请求期间出现错误400(错误请求)

[英]Error 400 (Bad request) during POST request

我正在尝试从我的React应用程序向我的服务器发送POST请求,但是我不断收到状态400 Bad Request错误。 例外是

“org.springframework.http.converter.HttpMessageNotReadableException”。

错误消息是

“ JSON分析错误:无法从START_ARRAY令牌中反序列化java.util.LinkedHashMap实例;嵌套的异常是com.fasterxml.jackson.databind.JsonMappingException:无法从START_ARRAY令牌\\ n中反序列化java.util.LinkedHashMap实例[来源:java.io.PushbackInputStream@6a188b06;第1行,第1列]]

我尝试使用POSTMAN测试API,但仍然出现相同的错误。

@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>)}

我要尝试执行的操作是从产品中接收信息并将其添加到购物车中。

已使用GET请求接收到产品信息。

使您的控制器的方法如下所示:

@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作为模型而不是Map接收。 你最好创建一个新的模型类- CartRequest有一个字段现在- productname ,并在控制器接受taht模型

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

如您所见,我没有说要在模型中包括productid字段。 这是因为当您的实体被ORM保存(例如,休眠)时,它不必具有ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM