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

相关推荐
阿弱5 小时前
graph-core 策略合并机制的设计与用法
后端·agent
fatcoder5 小时前
玩转Docker 08 — 实战:容器化真实后端并编排
后端·docker·容器
神奇小汤圆5 小时前
从原始的CRUD 到高并发架构:关于秒杀系统的问题拆解与推演
后端
魔兽大山哥5 小时前
NL2SQL 最怕越权:我在执行层叠了好几层 SQL 闸门
后端
foggyprojects5 小时前
当 AI 输出销售额时,如何让它解释这个数字是怎么算出来的?
后端
一只叫煤球的猫6 小时前
开个新坑,从头开始完整拆解 Spring AI 2.0 的源码
后端·面试·aigc
自进化Agent智能体6 小时前
Hermes Cron 定时任务 —— 让 Agent 自动工作
后端
我不是码神666 小时前
Windows 下 Codex CLI 报“拒绝访问 (os error 5)”:先查入口,再查配置
后端·chatgpt
她的男孩6 小时前
我用 LLM 把后台 CRUD 效率提升 10 倍:AI 代码生成器的架构与落地实践
java·后端·架构
程序员cxuan6 小时前
本地跑一个 Qwen 3.8,你将拥有一个 Opus 4.6
人工智能·后端·程序员