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

embedded/2024/9/24 0:23:43/

在这里插入图片描述

背景

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

错误信息如下:

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/embedded/13022.html

相关文章

Tomcat架构设计精髓分析-Connector高内聚低耦合设计

优秀的模块化设计通常都会采用高内聚、低耦合 高内聚是指相关度比较高的功能要尽可能集中&#xff0c;不要分散。低耦合是指两个相关的模块要尽可能减少依赖的部分和降低依赖的程序&#xff0c;不要让两个模块产中强依赖。 Tomca连接器需要实现的功能: 监听网络端口 接受网络…

Facebook的时间机器:回溯社交媒体的历史

1. 社交媒体的起源与早期模式 社交媒体的历史可以追溯到互联网的早期发展阶段。在Web 1.0时代&#xff0c;互联网主要是一个信息发布平台&#xff0c;用户主要是被动地接收信息。但随着Web 2.0的兴起&#xff0c;互联网逐渐转变为一个互动和参与的平台&#xff0c;社交媒体应运…

40. UE5 RPG给火球术增加特效和音效

前面&#xff0c;我们将火球的转向和人物的转向问题解决了&#xff0c;火球术可以按照我们的想法朝向目标发射。现在&#xff0c;我们解决接下来的问题&#xff0c;在角色释放火球术时&#xff0c;会产生释放音效&#xff0c;火球也会产生对应的音效&#xff0c;在火球击中目标…

机器学习和深度学习-- 李宏毅(笔记与个人理解)Day22

Day 22 Transformer seqence to seqence 有什么用呢&#xff1f; Encoder how Block work 仔细讲讲Residual 的过程&#xff1f; 重构 Decoder - AutoRegressive Mask 由于是文字接龙&#xff0c;所以无法考虑右边的 info 另一种decoder Encoder to Decoder – Cross Attend…

图像处理|关于二维傅里叶变换的学习笔记(实用版)

因为图像至少是2D的&#xff0c;所以在数字图像处理中使用的都是2D-傅里叶变换。 1.什么是傅里叶变换(DFT)&#xff1f;傅里叶变换是将图像从空间域转换到频域&#xff0c;其逆变换是将图像从频域转到空间域。 物理意义是&#xff1a; 2.频谱图怎么看&#xff1f;傅里叶频谱图…

Linux中的高级IO函数(三)fcntl

Linux提供了很多高级的I/O函数。它们并不像Linux基础I/O函数&#xff08;比如open和read&#xff09;那么常用&#xff08;编写内核模块时一般要实现这些I/O函数&#xff09;&#xff0c;但在特定的条件下却表现出优秀的性能。这些函数大致分为三类&#xff1a; 用于创建文件描…

用户中心 -- 插件使用 插件使用思路

易错注意点 1 5.1启动类 & 入口类 需保持一致 网址&#xff1a; 第一节课&#xff0c;用户管理--后端初始化&#xff0c;项目调通。二次翻工2-CSDN博客 一、 用户管理 框架 网址&#xff1a; 用户管理 --汇总 -- 明细-CSDN博客 1.2 更改路径&#xff0c;并生效 网址…

互联网轻量级框架整合之MyBatis动态SQL

MyBatis的动态SQL是一项强大且实用的功能&#xff0c;它允许开发者在XML映射文件中编写可灵活变化的SQL语句&#xff0c;这些语句能够根据传入参数的条件或值动态地调整其结构和内容。这样&#xff0c;程序可以在运行时生成适应特定业务场景的SQL&#xff0c;避免了手动拼接SQL…