HTTP请求参数类型及对应的后端注解
在Java后端开发中,HTTP请求的不同部分需要使用不同的注解来处理。以下是四种主要请求参数类型及其对应的Spring注解:
1. 请求头(Headers)
位置:HTTP请求的头部信息
常用场景:认证信息(Token)、客户端信息、内容类型等
Spring注解:
@RequestHeader
- 获取单个请求头@RequestHeader Map<String, String>
- 获取所有请求头
@GetMapping("/example")
public ResponseEntity<?> example(@RequestHeader("Authorization") String authToken,@RequestHeader Map<String, String> headers) {// 使用authToken和headers
}
2. 请求体(Body)
位置:HTTP请求的主体内容
常用场景:POST/PUT请求的JSON/XML数据
Spring注解:
@RequestBody
- 将请求体反序列化为Java对象
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody UserCreateDTO userDTO) {// 处理userDTO
}
3. 路径参数(Path Variables)
位置:URL路径中的变量部分
常用场景:RESTful API的资源标识
Spring注解:
@PathVariable
- 获取路径中的变量
@GetMapping("/users/{userId}")
public ResponseEntity<User> getUser(@PathVariable Long userId) {// 根据userId查询用户
}
4. 查询参数(Query Parameters)
位置:URL中
?
后面的键值对常用场景:过滤条件、分页参数等
Spring注解:
@RequestParam
- 获取单个查询参数@RequestParam Map<String, String>
- 获取所有查询参数@RequestParam(required = false)
- 可选参数@RequestParam(defaultValue = "default")
- 带默认值
@GetMapping("/products")
public ResponseEntity<List<Product>> getProducts(@RequestParam String category,@RequestParam(required = false) String sortBy,@RequestParam(defaultValue = "1") int page) {// 根据参数查询产品
}
综合使用示例
@RestController
@RequestMapping("/api/v1")
public class UserController {@PutMapping("/users/{id}/status")public ResponseEntity<?> updateUserStatus(@PathVariable Long id,@RequestHeader("X-Auth-Token") String token,@RequestBody StatusUpdateDTO updateDTO,@RequestParam(defaultValue = "false") boolean notify) {// 验证token// 更新用户状态// 如果需要则发送通知return ResponseEntity.ok().build();}
}
其他相关注解
@ModelAttribute
用于绑定请求参数到命令对象
常用于表单提交
@CookieValue
用于获取Cookie值
参数校验注解(需配合
@Valid
使用)@NotNull
,@Size
,@Pattern
等
最佳实践建议
RESTful API设计:
资源标识用路径参数(
@PathVariable
)过滤条件用查询参数(
@RequestParam
)创建/更新数据用请求体(
@RequestBody
)
安全性:
敏感信息(如认证token)应放在请求头
不要用GET请求发送敏感数据
可读性:
参数名要有意义
可选参数要设置
required=false
或默认值
版本控制:
建议在请求头或路径中包含API版本信息
这些注解是Spring MVC/WebFlux中最常用的参数绑定方式,掌握它们可以高效地处理各种HTTP请求。