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 注释。

相关推荐
一条Go35 分钟前
两套权限目录,三重闸门:Alioth 的多租户 RBAC 为什么这么拧
后端·程序员·github
Tokenfree1 小时前
把多模态 OCR 接进业务系统:四千张运单,三个坑
后端
用户859313061351 小时前
我给 AI Agent 写了个下载器:293KB 的网页,不再吃掉 7 万 token
后端
phil61 小时前
沙箱核心功能系列 06:编排调度与资源管理
后端
小兔子1 小时前
if (system(cmd) != 0) 判不出命令失败:它返回的是等待状态,不是退出码
后端
艾迪的技术之路1 小时前
16k 条慢查询,128 张分表,我这么解决
后端·github
dpharness1 小时前
我踩过的四个记忆坑,从预算到换机
前端·后端
加宝的起点雷达1 小时前
三个定时任务被删那天,系统一声不吭
人工智能·后端
泡海椒2 小时前
jquick-pdf 热力图(HEATMAP)实战:24 格营收矩阵嵌入评级报告的模板逐行拆解
后端
对象存储与RustFS2 小时前
Velero 接 RustFS 实操:K8s 集群备份落到自建对象存储
后端·docker·云原生