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

ops/2024/9/23 13:05: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/ops/11461.html

相关文章

【C++】---STL之vector的模拟实现

【C】---STL之vector的模拟实现 一、vector在源码中的结构&#xff1a;二、vector类的实现&#xff1a;1、vector的构造2、析构3、拷贝构造4、赋值运算符重载5、迭代器6、operator[ ]7、size()8、capacity()9、reserve()10、resize()11、empty()12、push_back()13、pop_back()1…

跟着野火从零开始手搓FreeRTOS(6)多优先级的配置

在 FreeRTOS 中&#xff0c;数字优先级越小&#xff0c;逻辑优先级也越小。 之前提过&#xff0c;就绪列表其实就是一个数组&#xff0c; 里面存的是就绪任务的TCB&#xff08;准确来说是 TCB 里面的 xStateListItem 节点&#xff09;&#xff0c;数组的下标对应任务的优先级&a…

7.2K star!一个完全免费,可以本地部署的 AI 搜索聚合器。新手可尝试

原文链接&#xff1a;7.2K star&#xff01;一个完全免费&#xff0c;可以本地部署的 AI 搜索聚合器。新手可尝试 ChatGPT 刚上线的时候我用的很少&#xff0c;还是习惯用 Google。主要还是因为不信任&#xff0c;怕它对我胡说八道。 慢慢的&#xff0c;也没有一个明确的时间…

Atlas Vector Search:借助语义搜索和 AI 针对任何类型的数据构建智能应用

Atlas Vector Search已正式上线&#xff01; Vector Search&#xff08;向量搜索&#xff09;现在支持生产工作负载&#xff0c;开发者可以继续构建由语义搜索和生成式人工智能驱动的智能应用&#xff0c;同时通过 Search Node&#xff08;搜索节点&#xff09;优化资源消耗并…

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法&#xff0c;主要用于数据聚类。其工作原理基于迭代优化&#xff0c;将数据点划分为K个集群&#xff0c;使得每个数据点都属于最近的集群&#xff0c;并且每个集群的中心&#xff08;质心&#xff09;是所有属于该集群的数据点的平均值。以下是…

十大排序——6.插入排序

这篇文章我们来介绍一下插入排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 插入排序的要点如下所示&#xff1a; 首先将数组分为两部分[ 0 ... low-1 ]&#xff0c;[ low ... arr.length-1 ]&#xff0c;然后&#xff0c;我们假设左边[ 0 ... low-1 ]是已排好序的部分…

密码学 | Random Oracle 随机预言机

​ &#x1f951;原文&#xff1a;究竟什么才是随机预言机呢&#xff1f; - 玄星的回答 &#x1f951;答主指出&#xff1a; 英文维基明明对 随机预言机 给出了两个完全不同的理解&#xff0c;但这两个理解之间的连接词却是 “Stated differently”&#xff0c;即 “换句话说…

探索亚马逊云科技「生成式 AI 精英速成计划」

目录 前言「生成式 AI 精英速成计划」技术开发课程学习课程学习 总结 前言 亚马逊云科技&#xff08;Amazon Web Services&#xff0c;简称AWS&#xff09;作为全球领先的云计算服务提供商&#xff0c;一直以来在推动人工智能&#xff08;AI&#xff09;领域的发展中扮演着重要…