API请求报错 Required request body is missing问题解决

server/2024/9/23 13:05:42/

在这里插入图片描述

背景

在进行调用的时候,加载方法,提示以下错误

错误信息如下:

javascript">{"code": 10001,"msg": "Required request body is missing:  XXX","data": null,"extra": null
}

Required request body is missing 错误通常表明服务器期望在 POST 请求的正文中接收到一些数据,但是实际上没有接收到。这可能是因为客户端没有发送正确的请求体,或者是因为服务器端的配置有问题。

所以根据前后端分别拆分校验定位。
在这里插入图片描述

解决过程

1、后端接口验证

使用PostMan直接调用接口。没有发现问题。数据可以正常返回。

PostMan是一个模拟接口调用的工具。具体可以自行百度。

2、前端验证

PostMan可以正常返回数据了。
所以,真相只有一个,那就是前端问题了。

2.1 传输参数定位

代码如下:

javascript">apiMethod(this.queryParams).then((response) => {
//业务代码
}

this.queryParams的定义如下:

javascript">// 查询参数queryParams: {pageNum: 1,pageSize: 10,due: undefined,status: undefined,start: undefined,end: undefined,},

打印参数也OK。

2.2 参数格式问题

后端形参是一个对象,使用的@RequestBody的Post方式。所以应该也不会有问题。

如是,我想了下,是不是传递参数的过程中没有格式化json格式导致的问题。(死马当活马医,因为我用POstman去跑的时候,用的是JSOn格式)

于是我修改为apiMethod(JSON.stringify(this.queryParams))方式,调用的时候发现还是不OK。

如果参数没问题,那么就是传输的时候的问题了,我猜测问题应该是在远程调用的时候的问题。
于是找到JS的方法的api定义方法:

javascript">export function apiMethod(query) {return request({url: "XXXX",method: "post",query,});
}

2.3 传输定义

我把其中的query修改为data:query。然后重新调试,发现问题解决了。
代码如下:

javascript">export function apiMethod(query) {return request({url: "XXXX",method: "post",data: query,});
}

在这里插入图片描述

伪代码

后端Controller层:

java">@RestController  
@RequestMapping("/api")  
public class MyController {  @PostMapping("/someEndpoint")  public ResponseEntity<String> handlePostRequest(@RequestBody MyVO vo) {  // 处理 vo 对象  return ResponseEntity.ok("Received request with VO object");  }  
}

前端代码:

javascript">export function apiMethod(query) {return request({url: "XXXX",method: "post",data: query,});
}

在这里插入图片描述

分析总结

根据实际情况,一般定位这种问题参考以下几点来进行排除:

  • 客户端请求: 客户端必须发送一个包含请求体的 POST 请求。请求体应该是一个 JSON 字符串,其结构与 MyVO 类的字段相匹配。

  • Content-Type: 确保客户端在请求头中设置了正确的 Content-Type,通常为 application/json。

  • VO 类定义: VO 类应该与 JSON 数据中键的字段相对应,并且这些字段应该有正确的 getter 和 setter 方法。如果有任何不匹配,Spring MVC 将无法正确地将 JSON 数据绑定到 VO 对象。

  • Spring 配置: 确保 Spring 应用已经配置了用于处理 JSON 的消息转换器,例如 MappingJackson2HttpMessageConverter。这通常是通过在类路径上有 Jackson 相关的依赖项自动配置的。

  • 异常处理: 检查你的控制器是否有任何异常处理逻辑,它可能会捕获并处理这个错误,而不是将其返回客户端。

基本上使用上面几点来做排除法,问题都能进行解决。如果你已经检查了上述所有点,但问题仍然存在,那么需要查看更详细的日志信息,或者调试 Spring MVC 控制器以查看在何处丢失了请求体。


http://www.ppmy.cn/server/11719.html

相关文章

python爬虫之POST和GET方法总结(6)

如果网页是get请求方法 import requests from bs4 import BeautifulSoupif __name__ __main__:url https://www.biqg.cc/book/6909/11.html#目标访问网站urlheader {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l…

华为海思数字芯片设计笔试第七套

声明 下面的题目作答都是自己认为正确的答案&#xff0c;并非官方答案&#xff0c;如果有不同的意见&#xff0c;可以评论区交流。 这些题目也是笔者从各个地方收集的&#xff0c;感觉有些题目答案并不正确&#xff0c;所以在个别题目会给出自己的见解&#xff0c;欢迎大家讨论…

深度学习配置环境AllInOne

总结深度学校ubuntu环境配置 目录 0.前提工作0. nvidia驱动安装1.CudaTookits安装2. cuDNN安装3.conda安装3.0 conda基本概念3.1 系统python版本确认3.2 miniconda安装3.3 ~~conda迁移~~3.4 附4.pytorch安装5. git安装5.1 git命令行安装5.2 git-gui安装0.前提工作 安装顺序:n…

linux捕获特定的信号并打印堆栈信息

在Linux中&#xff0c;你可以使用gcore命令生成核心转储文件&#xff0c;然后使用gdb来分析这个文件&#xff0c;打印出堆栈信息。 首先&#xff0c;你需要设置一个信号处理器来捕获特定的信号&#xff0c;并在处理器中调用gcore命令来生成核心转储文件。 以下是一个简单的示…

最最普通程序员,如何利用工资攒够彩礼,成为人生赢家

今天我们不讲如何提升你的专业技能去涨工资&#xff0c;不讲面试技巧如何跳槽涨工资&#xff0c;不讲如何干兼职赚人生第一桶金&#xff0c;就讲一个最最普通的程序员&#xff0c;如何在工作几年后&#xff0c;可以攒够彩礼钱&#xff0c;婚礼酒席钱&#xff0c;在自己人生大事…

Rabbitmq安装延迟插件rabbitmq_delayed_message_exchange失败

Docker里的Rabbitmq容器安装延迟插件rabbitmq_delayed_message_exchange失败 一启动插件Rabbitmq容器直接停止运行了 rabbitmq-plugins enable rabbitmq_delayed_message_exchange排除了版本问题和端口问题等&#xff0c;发现是虚拟机运行内存不够&#xff0c;增加虚拟机运行内…

【React】Sigma.js框架网络图-入门篇

一、介绍 Sigma.js是一个专门用于图形绘制的JavaScript库。 它使在Web页面上发布网络变得容易&#xff0c;并允许开发人员将网络探索集成到丰富的Web应用程序中。 Sigma.js提供了许多内置功能&#xff0c;例如Canvas和WebGL渲染器或鼠标和触摸支持&#xff0c;以使用户在网页上…

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南 由北京海特伟业任洪卓发布于2024年4月23日 随着“互联网”被提升为国家战略&#xff0c;传统行业与互联网的深度融合正在如火如荼地展开。在这一大背景下&#xff0c;海特伟业紧跟时代步伐&#xff0c;凭借其深厚…