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

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


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


错误信息是:


“JSON 解析错误:无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例;嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例\n [来源: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 });

}

发送请求的Button如下


{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请求接收到产品信息。


BIG阳
浏览 754回答 1
1回答

一只甜甜圈

使您的控制器的方法如下所示:@PostMapping("/cart")public Cart create(@RequestBody Map<Integer, Integer> body){&nbsp; &nbsp; int productid = body.get("productid");&nbsp; &nbsp; String productname=body.get("productname");&nbsp; &nbsp; return cartRepository.save(new Cart(productid, productname));}顺便说一句,您可以将 json 作为模型而不是 Map 接收。你最好创建一个新的模型类 - CartRequest 现在只有一个字段 -productname并在控制器中接受 taht 模型@PostMapping("/cart")public Cart create(@RequestBody CartRequest cartRequest){&nbsp;&nbsp; return cartRepository.save(new Cart(0, cartRequest.getProductname()));}如您所见,我并没有说要productid在模型中包含字段。这是因为你的实体在被 ORM 保存时必须没有 id(例如休眠)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java