当前位置: 首页 > backend >正文

@RequestParam @RequestHeader @RequestBody 三者详解

好的!我用大白话和比喻来解释这三个注解的区别:


🧩 @RequestParam
作用:从网址的“问号后面”拿参数。
场景:比如你打开淘宝搜索商品,网址是:
https://taobao.com/search?keyword=手机&price=2000
这里的 keyword=手机price=2000 就是通过 @RequestParam 拿到的。

通俗比喻:
像你去餐厅点菜,服务员问你:“要什么菜?辣不辣?”,你回答:“水煮鱼,中辣”。
@RequestParam 就是服务员记下你回答的“参数”(菜名和辣度)。

代码示例:

// 访问 /order?food=水煮鱼&spicy=中辣
@GetMapping("/order")
public void order(@RequestParam("food") String food,       // 拿到 "水煮鱼"@RequestParam("spicy") String spicy     // 拿到 "中辣"
) {}

🧩 @RequestBody
作用:从请求的“身体里”拿一大段数据(比如 JSON)。
场景:比如你注册账号时,提交的信息(用户名、密码、手机号)会被包装成一个 JSON 对象发送给服务器。

通俗比喻:
像你寄快递,把一堆东西打包成一个箱子,快递员直接拆箱验货。
@RequestBody 就是拆开箱子,把里面的东西(JSON 数据)直接转成一个 Java 对象。

代码示例:

// 提交 JSON:{"username": "张三", "password": "123456"}
@PostMapping("/register")
public void register(@RequestBody User user) {// user 对象里直接有 username 和 password
}

🧩 @RequestHeader
作用:从请求的“头信息”里拿数据(比如浏览器类型、登录令牌)。
场景:比如你登录后,服务器给你一个 token,后续请求需要把这个 token 放在请求头里。

通俗比喻:
像你去银行办业务,工作人员会先看你的身份证(放在“头信息”里),而不是你填的表单。
@RequestHeader 就是工作人员检查你的身份证信息。

代码示例:

// 请求头里带:Authorization: Bearer xxx-token
@GetMapping("/profile")
public void profile(@RequestHeader("Authorization") String token) {// 拿到 token,检查用户是否登录
}

🌟 总结成一张表

注解作用比喻典型场景
@RequestParam从网址问号后拿参数服务员记下你的点菜要求GET 请求、搜索过滤条件
@RequestBody从请求体拿完整数据拆快递箱验货POST/PUT 提交 JSON 数据
@RequestHeader从请求头拿隐藏信息银行检查身份证身份验证(Token)、浏览器信息

常见错误

  1. @RequestParam 去拿 JSON 数据
    • 错:@RequestParam 只能拿 ?key=value,拿不了 JSON 里的数据!

    • 对:JSON 必须用 @RequestBody

  2. 把 Token 放在网址里(?token=xxx
    • 错:Token 应该通过 @RequestHeader 放在请求头里,更安全!

  3. 忘写 @RequestBody
    • 错:提交 JSON 时如果没写这个注解,后端根本拿不到数据!


记住这三点,写代码时就不会搞混啦! 😉

http://www.xdnf.cn/news/5517.html

相关文章:

  • 【英语笔记(四)】诠释所有16种英语时态,介绍每种时态下的动词变形!!含有所有时态的的动词变形汇总表格
  • C语言学习记录——深入理解指针(4)
  • 单片机-STM32部分:13、PWM
  • MongoDB
  • wget、curl 命令使用场景与命令实践
  • 数据并行基础概念知识
  • openai接口参数max_tokens改名max-completion-tokens?
  • 17前端项目----支付弹框
  • 10.二叉搜索树中第k小的元素(medium)
  • 用pymysql操作数据库
  • POST请求 、响应、requests库高级用法
  • 甜蜜聊天话术库
  • Go语言标识符
  • 嵌入式STM32学习——433M无线遥控灯
  • AI-Talk开发板之驱动1.28寸圆屏
  • 深入理解 Polly:.NET Core 中的健壮错误处理策略
  • HTTP/1.1 host虚拟主机详解
  • USB学习【6】USB传输错误的处理
  • Typescript 源码核心流程
  • 【C语言练习】035. 编写结构体的函数
  • MySQL视图深度解析:从基础语法到高级应用
  • Mask-aware Pixel-Shuffle Down-Sampling (MPD) 下采样
  • vector 常见用法及模拟
  • 算法题(144):跳石头
  • 游戏逆向开发全阶段电子资料分享 – 从入门到精通实战教程
  • 软件架构师知识点总结
  • nfs挂载
  • python实现用户登录
  • 系统架构设计(四):架构风格总结
  • 常见的 DCGM 设备级别指标及其含义