Spring框架请求注解
1.@RequestParam
- 作用:从请求的 查询参数(Query Parameters) 或 表单数据(Form Data) 中提取参数。
- 适用场景:
- GET 请求的 URL 参数(如
/users?name=Tom&age=20
)。 - POST 请求的表单数据(
application/x-www-form-urlencoded
格式)。
@GetMapping("/users")
public List<User> getUsers(@RequestParam String name, @RequestParam int age) {
}
2.@RequestBody
- 作用:从请求的 请求体(Request Body) 中提取数据,通常用于处理 JSON、XML 等结构化数据。
- 适用场景:
- POST/PUT 请求的 JSON/XML 数据(如
application/json
格式)。 - 上传复杂对象(如嵌套结构、自定义类等)。
- 示例:
@PostMapping("/users")
public User createUser(@RequestBody User user) {
}
3.@PathVariable
- 作用:从 URL 路径中提取 路径变量(Path Variables)。
- 适用场景:
- RESTful 风格的 API(如
/users/{id}
)。
- 示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
}
4. @RequestHeader
- 作用:从请求的 请求头(Headers) 中提取参数。
- 适用场景:
- 获取自定义请求头(如
Authorization
、Content-Type
)。
- 示例:
@GetMapping("/profile")
public String getProfile(@RequestHeader("Authorization") String token) {
}
5. @CookieValue
- 作用:从请求的 Cookie 中提取参数。
- 适用场景:
- 示例:
@GetMapping("/user")
public String getUser(@CookieValue("JSESSIONID") String sessionId) {
}
6. @RequestPart
- 作用:用于处理 multipart/form-data 请求中的部分数据(如文件和字段混合数据)。
- 适用场景:
- 示例:
@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestPart("file") MultipartFile file,@RequestPart("description") String description) {
}
7. @ModelAttribute
- 作用:将请求参数绑定到一个 Java 对象中(支持自动映射字段)。
- 适用场景:
- 示例:
@PostMapping("/users")
public User createUser(@ModelAttribute User user) {
}
8. @Param(MyBatis 中使用)
- 作用:在 MyBatis 中用于指定 SQL 参数的名称。
- 适用场景:
- 示例:
@Select("SELECT * FROM users WHERE name = #{name}")
User findByName(@Param("name") String name);
总结对比
注解 | 数据来源 | 适用场景 |
---|
@RequestParam | 查询参数或表单字段(x-www-form-urlencoded ) | 简单参数传递(如分页、搜索条件)。 |
@RequestBody | 请求体(JSON/XML) | 上传复杂对象或大量数据(如用户注册、更新)。 |
@PathVariable | URL 路径 | RESTful 风格的 API(如 /users/{id} )。 |
@RequestHeader | 请求头 | 获取自定义头信息(如 Authorization )。 |
@CookieValue | Cookie | 获取用户会话信息(如 JSESSIONID )。 |
@RequestPart | multipart/form-data 请求体 | 文件上传与表单字段混合的场景。 |
@ModelAttribute | 表单字段 | 将表单字段自动映射到 Java 对象。 |
为什么需要这么多注解?
- 灵活性:不同的场景需要不同的参数绑定方式(如 URL 路径、请求体、请求头等)。
- 清晰性:通过注解明确参数的来源,提高代码可读性和可维护性。
- 功能扩展:支持复杂的请求类型(如文件上传、多参数混合等)。