参数传递方式总结
1. 路径参数(Path Variables)
前端请求示例:
GET /api/items/123
后端接收写法:
@GetMapping("/api/items/{id}")
public ResponseEntity<?> getItem(@PathVariable("id") Long itemId) {
// 处理逻辑
return ResponseEntity.ok("Item ID: " + itemId);
}
省略注解的情况:
@PathVariable
注解不能省略。路径参数必须显式标注以绑定 URL 中的部分到方法参数。
2. 请求体参数(Request Body)
前端请求示例:
POST /api/items
Content-Type: application/json
{
"name": "itemName",
"price": 100
}
后端接收写法:
@PostMapping("/api/items")
public ResponseEntity<?> createItem(@RequestBody ItemDto item) {
// 处理逻辑
return ResponseEntity.ok("Item created: " + item.getName());
}
省略注解的情况:
@RequestBody
注解不能省略。需要明确地将请求体内容绑定到方法参数。
3. 请求头参数(Request Headers)
前端请求示例:
GET /api/items
Content-Type: application/json
Authorization: Bearer some-token
后端接收写法:
@GetMapping("/api/items")
public ResponseEntity<?> getItems(@RequestHeader("Authorization") String authHeader) {
// 处理逻辑
return ResponseEntity.ok("Auth Header: " + authHeader);
}
省略注解的情况:
@RequestHeader
注解不能省略。必须明确地将请求头中的值绑定到方法参数。
4. 查询参数(Query Parameters)
前端请求示例:
GET /api/items?id=101&status=1
后端接收写法:
@GetMapping("/api/items")
public ResponseEntity<?> getItems(@RequestParam("id") Long id, @RequestParam("status") Integer status) {
// 处理逻辑
return ResponseEntity.ok("ID: " + id + ", Status: " + status);
}
省略注解的情况:
当查询参数名称和控制器方法参数名称相同时,@RequestParam
可以省略。例如:
@GetMapping("/api/items")
public ResponseEntity<?> getItems(Long id, Integer status) {
// 处理逻辑
return ResponseEntity.ok("ID: " + id + ", Status: " + status);
}
注意事项:
- 如果查询参数是必需的且必须提供默认值,仍然需要使用
@RequestParam
注解并指定required
属性和defaultValue
属性。 - 在需要自定义参数名或处理复杂类型时,也需要使用
@RequestParam
。
总结
- 路径参数和请求头参数:必须显式使用
@PathVariable
和@RequestHeader
注解。 - 请求体参数:必须显式使用
@RequestBody
注解。 - 查询参数:当参数名与方法参数名相同时,可以省略
@RequestParam
注解;否则,必须使用@RequestParam
。