测试接口传参数时,放在Header和Body中后台接收参数的区别

Post 请求:参数放 Header / Body 后端接收区别(SpringBoot)

一、参数放在 Header(请求头)

1、取值注解:@RequestHeader

java 复制代码
@PostMapping("/header")
public String getHeader(@RequestHeader("token") String token) {
    return token;
}
  • 位置:Postman → Headers 面板填 key=value
  • 特点
  1. 不属于请求体,和 GET/POST 无关,GET 也能在 Header 带参
  2. 无法传复杂对象、数组,只适合短字符串(token、appId、版本号)
  3. 不会被@RequestBody读取,和 Body 参数互不干扰
  4. 参数不在 url、不在 body,抓包在请求头字段

二、参数放在 Body(请求体)分两种格式

① Body → x-www-form-urlencoded(表单格式)

取值:@RequestParam

java 复制代码
@PostMapping("/form")
public String getForm(@RequestParam("name") String name) {
    return name;
}
  • Postman:Body→x-www-form-urlencoded,键值对
  • 底层:表单拼接name=xx&age=18,放到请求体
  • 不能用 @RequestBody 接收

② Body → raw-JSON(最常用)

取值:@RequestBody整个 body 封装成对象

java 复制代码
@PostMapping("/json")
public String getJson(@RequestBody User user) {
    return user.getName();
}
  • Postman:Body→raw→JSON {"name":"张三"}
  • 规则:
  1. @RequestBody一次性读取整个 Body 流,一个接口只能出现一次
  2. 不能搭配@RequestParam拿 body 里字段
  3. 支持对象、数组、嵌套复杂结构

三、核心对比汇总

位置 取值注解 数据格式 适用场景
Header @RequestHeader 单个字符串 token、鉴权、设备信息
Body 表单 @RequestParam key=val&key=val 简单键值、老表单提交
Body JSON @RequestBody JSON{}/\[\] 前后端分离、复杂入参

四、高频踩坑

  1. JSON 参数放 Body,却用 @RequestParam:拿不到值,报参数缺失
  2. Header 参数用 @RequestBody:拿不到,RequestBody 只读 body
  3. 一个接口:@RequestHeader(头) + @RequestBody(体) 可以共存,互不冲突
相关推荐
Jun6261 小时前
QT(8)-线程锁
java·开发语言
biubiubiu07061 小时前
SpringBoot 3.5.4 整合Quartz 定时任务
java·spring boot·spring
mifengxing1 小时前
LeetCode热题100——字母异位词分组
java·算法·leetcode·职场和发展·哈希表·hot100
whatever who cares1 小时前
Vue3中vue文件和composables的分工
前端·javascript·vue.js
袋鼠云数栈UED团队2 小时前
基于 superpowers 实现复杂前端改造
前端
袋鼠云数栈前端2 小时前
基于 superpowers 实现复杂前端改造
前端·ai
sugar__salt2 小时前
LLM服务HTTP接口实战:前端HTTP请求全解与项目落地
前端·网络协议·http
薛先生_0992 小时前
vue-编程式跳转-基本跳转
前端·javascript·vue.js
微三云、小叶2 小时前
排队免单系统底层设计:四种分配算法拆解,无预支资金的合规营销架构方案
java·前端·软件开发·商业模式·本地生活·商业思维