Java 使用@RequestBody 注入失效,但是删除注解后却成功运行

问题情景

直接上代码

less 复制代码
@GetMapping("/list")
public Result getList(@RequestBody Dish dish){

    ....

}

按理说前台传入的参数,会被依次注入Dish类,可是控制台却报错了。我也检查过Dish类的属性与传入的参数key是否对应无误,这就很奇怪了。并且删除注解后反而能够成功运行...

vbscript 复制代码
WARN 34044 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved

[org.springframework.http.converter.HttpMessageNotReadableException: Required request body

is missing: public com.example.demo.common.Result 

com.example.demo.controller.DishController.getList(com.example.demo.pojo.Dish)]

解释

看了控制台提示是说没有请求体,查阅了资料后知道了:

在使用 @RequestBody 时,任何请求方法都可以使用,但是必须注意某些请求可能没有请求正文,因此使用 @RequestBody 将会导致错误。特别地,在 GET 请求中,请求正文不存在,因此将 @RequestBody 用于 GET 请求通常是不必要的,也不被建议。

因此,以下请求通常不需要使用 @RequestBody 注释:

  1. GET 请求:GET 请求通常没有请求正文,因此使用 @RequestBody 注释将不起作用。
  2. DELETE 请求:与 GET 请求类似,DELETE 请求通常不包含请求正文,因此使用 @RequestBody 注释将不起作用。
  3. HEAD 请求:HEAD 请求与 GET 请求类似,但不返回请求正文,因此使用 @RequestBody 注释没有意义。

总之,除非请求具有请求正文(例如 POST 或 PUT 请求),否则不需要在方法中使用 @RequestBody 注释。

相关推荐
ZhengEnCi13 分钟前
Agent 自动化系统怎么搭:从 Super-agent 架构到事件驱动调度(全文可跑)
后端·架构
学长毕设19 分钟前
基于SpringBoot的网上流浪狗救助捐赠平台-附源码
java·spring boot·后端
xiaoqiMikko20 分钟前
Redis 实战(三):持久化出错 —— fork 失败、磁盘写满、AOF 膨胀与损坏,逐个复现(6.2.4)
redis·后端
UNIHHIOT21 分钟前
开源一套工业物联网平台:驱动崩了不影响别的协议,64MB 堆跑边缘网关
前端·后端
废柴程序员_熊熊23 分钟前
DeepSeek Harness 实测:两条命令装好,11 步写完 632 行代码,3 个测试全绿
后端
phil625 分钟前
沙箱核心功能系列 05:沙箱内 Agent 与进程执行 API
后端
用户59476144259525 分钟前
Windows 部署 Playwright MCP 供 linux Codex 远程操作 Chrome:403 Forbidden 与 0 Tools 问题排查
后端
用户3949950846328 分钟前
Python 的哈希契约:为什么 list 不能当字典的键
后端
leo在掘金36 分钟前
744B模型,32GB内存跑起来
后端·架构
dpharness36 分钟前
我亲手跑了一遍存量统计,兜底类居然排到第二
后端