在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請求。