请求参数: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参数用于辅助操作(如排序、搜索)。
相关推荐
生擒小朵拉4 分钟前
STM32添加库函数
java·javascript·stm32
Z_z在努力10 分钟前
【杂类】Spring 自动装配原理
java·spring·mybatis
程序员爱钓鱼22 分钟前
Go语言实战案例-开发一个Markdown转HTML工具
前端·后端·go
小小菜鸡ing38 分钟前
pymysql
java·服务器·数据库
getapi40 分钟前
shareId 的产生与传递链路
java
桦说编程1 小时前
爆赞!完全认同!《软件设计的哲学》这本书深得我心
后端
thinktik1 小时前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
我没想到原来他们都是一堆坏人2 小时前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
沙二原住民2 小时前
提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
java·数据库·oracle