You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用@RequestBody接收字符串时出现「Required request body is missing」错误?

接口400错误原因分析

先看返回的错误信息:

{
"timestamp": "2022-11-20T13:17:24.172+0000",
"status": 400,
"error": "Bad Request",
"message": "Required request body is missing: public java.lang.String"
}

错误核心原因

  • @RequestBody的强制约束:接口方法里的prodId参数加了@RequestBody注解,Spring MVC会强制要求该参数必须从HTTP请求体(Request Body)中获取,且请求必须携带非空的请求体。如果调用接口时没有传入请求体,或者请求体为空,就会直接抛出这个400错误。

  • 传参方式与接口定义不匹配:DELETE请求场景下,多数调用方习惯用URL路径参数(如/products/123)或查询参数(如/deleteProduct?prodId=123)传递产品ID,但你的接口定义是从请求体读取prodId。如果调用方按习惯用路径/查询参数传值,没在请求体里放内容,就会触发"缺少请求体"的错误。

  • 请求体格式不兼容(次要可能):即使传了请求体,如果格式无法被Spring解析为String类型(比如传入复杂JSON对象而非纯字符串),也可能触发该错误,但这种情况相对少见,最常见的还是完全未传请求体的场景。

可选修正方案

如果想改用更符合DELETE请求习惯的传参方式,可以修改接口参数:

// 改用路径参数
public String deleteProduct(@PathVariable String prodId, HttpServletRequest request) throws NotLoggedInException {
    // 原有校验与业务逻辑保留
}

如果坚持用请求体传参,调用接口时必须在请求体中传入字符串格式的产品ID,比如请求体内容直接写"PROD001"(注意要带字符串引号)。

内容的提问来源于stack exchange,提问作者Mohana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:40:31