java - 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请求接收到产品信息。
解决方案
使您的控制器的方法如下所示:
@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(例如休眠)
推荐阅读
- html - Django:在模板中显示特定组级别的按钮
- python - 在 jupyter 实验室中使用 matplotlib 3d 绘制的错误图片
- elasticsearch - Elasticsearch -- 确定给定时间是否在 TIME 范围内
- apache-kafka - 管道损坏后如何修复代理可能不可用
- azure-devops - Azure Devops 发布管道 - 获取源(构建管道)值的变量?
- python - 使用列表选择器就地添加
- python - 列出所有可能的随机 3 个字符或 4 个字符
- python - 使用 pypdf2 读取 pdf 元数据
- react-native - React Native 0.60 中“react-native 弹出”的替代方法是什么来重新生成 iOS 和 android 文件夹?
- migration - IBM Bluemix 应用程序迁移问题