Post 请求:参数放 Header / Body 后端接收区别(SpringBoot)
一、参数放在 Header(请求头)
1、取值注解:@RequestHeader
java
@PostMapping("/header")
public String getHeader(@RequestHeader("token") String token) {
return token;
}
- 位置:Postman → Headers 面板填 key=value
- 特点
- 不属于请求体,和 GET/POST 无关,GET 也能在 Header 带参
- 无法传复杂对象、数组,只适合短字符串(token、appId、版本号)
- 不会被
@RequestBody读取,和 Body 参数互不干扰 - 参数不在 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":"张三"} - 规则:
@RequestBody一次性读取整个 Body 流,一个接口只能出现一次- 不能搭配
@RequestParam拿 body 里字段 - 支持对象、数组、嵌套复杂结构
三、核心对比汇总
| 位置 | 取值注解 | 数据格式 | 适用场景 |
|---|---|---|---|
| Header | @RequestHeader | 单个字符串 | token、鉴权、设备信息 |
| Body 表单 | @RequestParam | key=val&key=val | 简单键值、老表单提交 |
| Body JSON | @RequestBody | JSON{}/\[\] | 前后端分离、复杂入参 |
四、高频踩坑
- JSON 参数放 Body,却用 @RequestParam:拿不到值,报参数缺失
- Header 参数用 @RequestBody:拿不到,RequestBody 只读 body
- 一个接口:
@RequestHeader(头) + @RequestBody(体)可以共存,互不冲突