请求参数:Header 参数,Body 参数,Path 参数,Query 参数分别是什么意思,什么样的,分别通过哪个注解获取其中的信息

在API开发中(如Spring Boot),请求参数可以通过不同方式传递,对应不同的注解获取。以下是 Header参数、Body参数、Path参数、Query参数 的区别及对应的注解:


Header 参数

• 含义:通过HTTP请求头(Headers)传递的参数,通常用于认证(如Authorization)、客户端信息(如User-Agent)等。

• 示例:

java 复制代码
GET /api/user HTTP/1.1
Authorization: Bearer xxxx

• Spring注解:

• @RequestHeader:获取单个Header值。

• @RequestHeader Map<String, String>:获取所有Headers。

• 代码示例:

java 复制代码
@GetMapping("/user")
public String getUser(@RequestHeader("Authorization") String token) {
    return "Token: " + token;
}

Body 参数

• 含义:通过HTTP请求体(Body)传递的参数,通常用于提交JSON/XML格式的复杂数据(如创建资源)。

• 示例:

java 复制代码
POST /api/user HTTP/1.1
Content-Type: application/json

{"name": "Alice", "age": 25}

• Spring注解:

• @RequestBody:将请求体反序列化为Java对象(需指定Content-Type为application/json)。

• 代码示例:

java 复制代码
@PostMapping("/user")
public User createUser(@RequestBody User user) {
    return userService.save(user);
}

Path 参数

• 含义:通过URL路径传递的参数(RESTful风格),用于标识资源(如用户ID)。

• 示例:

java 复制代码
GET /api/user/123

• Spring注解:

• @PathVariable:从URL模板中提取变量值。

• 代码示例:

java 复制代码
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
    return userService.findById(id);
}

Query 参数

• 含义:通过URL问号后拼接的参数(?key=value),用于过滤、分页等非必选参数。

• 示例:

java 复制代码
GET /api/user?name=Alice&age=25

• Spring注解:

• @RequestParam:获取单个Query参数。

• @RequestParam Map<String, String>:获取所有Query参数。

• @RequestParam(required = false):标记参数为可选。

• 代码示例:

java 复制代码
@GetMapping("/user")
public List<User> searchUsers(
    @RequestParam String name,
    @RequestParam(required = false) Integer age
) {
    return userService.search(name, age);
}

总结对比表

参数类型 传递方式 典型用途 Spring注解
Header HTTP请求头 认证、客户端信息 @RequestHeader
Body HTTP请求体(JSON/XML) 提交复杂数据 @RequestBody
Path URL路径(如/user/1) 标识资源 @PathVariable
Query URL问号后(?name=xx) 过滤、分页等可选参数 @RequestParam

其他注意事项

  1. 混合使用:一个接口可以同时使用多种参数类型(如Path + Query + Header)。
java 复制代码
@PutMapping("/user/{id}")
public User updateUser(
    @PathVariable Long id,
    @RequestBody User user,
    @RequestHeader("X-Request-From") String source
) { ... }
  1. 默认值:@RequestParam和@RequestHeader支持设置默认值:
java 复制代码
@RequestParam(defaultValue = "1") int page
  1. RESTful设计:优先使用Path参数标识资源,Query参数用于辅助操作(如排序、搜索)。
相关推荐
胡写代码14 小时前
若依 + MyBatis-Plus,分页为什么悄悄失效了?
java·后端
yxlalm14 小时前
4.java秒杀项目第四课-后端商品后台接口
java·开发语言
掘金者阿豪14 小时前
OceanBase 和金仓怎么选?别只看分布式,复杂查询更考验架构取舍
前端·后端·架构
宁之明起(B服)14 小时前
vulhub靶场(tomcat三件套:PUT写马、Ghostcat与manager弱口令)
java·tomcat
cjz389914 小时前
Redis + Lua 实现秒杀优惠券 IP + 用户双维度令牌桶限流
后端
Shinomiya14 小时前
虚拟地址空间:从“地址一样但物理内存不同”说起
后端
孙启超14 小时前
【AI开发之Rust】第 1 课:认识 Rust 与开发环境 —— 装好工具链,跑通第一个程序
开发语言·人工智能·后端·ai·rust·安全架构
君顾114 小时前
家政派单小程序源码开发实战:从零搭建到上线全流程指南
java·开发语言·家政派单
流烟默14 小时前
HTTP 连接管理技术梳理:JDK KeepAliveCache 机制与池化选型
java·网络协议·http
阿酷tony15 小时前
视频专栏列表的防录屏水印和跑马灯效果(也可网站调用)
java·前端·音视频