@ResquestBody @RequestParam @PathVariable
时间: 2025-01-15 22:09:06 浏览: 57
### Spring MVC 中 `@RequestBody`、`@RequestParam` 和 `@PathVariable` 注解的区别和用法
#### 使用场景差异
- **`@RequestBody`**
- 此注解用于将 HTTP 请求体中的数据绑定到方法参数上。通常适用于 POST 或 PUT 方法,当客户端发送 JSON 或 XML 数据时使用此注解来接收整个请求体的内容并将其映射为 Java 对象[^1]。
```java
@PostMapping("/createPet")
public ResponseEntity<Pet> createPet(@RequestBody Pet pet){
clinic.addPet(pet);
return new ResponseEntity<>(pet, HttpStatus.CREATED);
}
```
- **`@RequestParam`**
- 当需要获取 URL 查询字符串中的单个参数值时可以使用该注解。它可以从 GET 请求的查询部分提取特定名称的参数,并可设置默认值以及是否必填等属性[^2]。
```java
@GetMapping("/findPetsByName")
public List<Pet> findPetsByName(@RequestParam(value="name", required=false, defaultValue="unknown") String name){
return clinic.findPetsByName(name);
}
```
- **`@PathVariable`**
- 如果希望从 URI 路径中捕获变量,则应采用这个注解。这允许定义 RESTful 风格 API 的资源定位符,在删除或更新指定 ID 的记录时非常有用。
```java
@RequestMapping(method = RequestMethod.DELETE)
public String deletePet(@PathVariable int ownerId, @PathVariable int petId) {
this.clinic.deletePet(petId);
return "redirect:/owners/" + ownerId;
}
```
#### 参数传递方式的不同
- `@RequestBody`: 整个请求体作为输入流读取,适合复杂对象传输。
- `@RequestParam`: 来自于 URL 后面跟问号后的键值对形式的数据。
- `@PathVariable`: 嵌入在 URL 模板路径内的占位符。
通过上述对比可以看出三种注解分别对应不同的应用场景,开发者可以根据实际需求选择合适的注解实现功能开发。
阅读全文
相关推荐



















