@requestBody @requestParam注解
时间: 2025-06-26 13:29:39 浏览: 12
### 关于 `@RequestBody` 和 `@RequestParam` 的用法及区别
#### 定义与功能
`@RequestBody` 注解用于将 HTTP 请求体中的 JSON 数据绑定到方法参数上。它通常用于处理 POST 或 PUT 请求,其中请求体包含了复杂的数据结构,例如对象或数组[^3]。
```java
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
return new ResponseEntity<>(userService.save(user), HttpStatus.CREATED);
}
```
相比之下,`@RequestParam` 注解用于从查询字符串中提取单个参数值。它可以用来获取 GET 请求 URL 中的键值对或者表单提交数据中的简单字段[^4]。
```java
@GetMapping("/search")
public ResponseEntity<List<Item>> searchItems(@RequestParam String query) {
return new ResponseEntity<>(itemService.search(query), HttpStatus.OK);
}
```
#### 主要差异
1. **数据来源不同**
- `@RequestBody`: 来自 HTTP 请求体 (Request Body),适用于复杂的 JSON 对象。
这种方式适合传递较大的数据集或嵌套的对象结构[^5]。
- `@RequestParam`: 来自查询字符串 (Query Parameters) 或者表单数据 (Form Data),适用于简单的键值对形式的小型数据传输[^6]。
2. **适用场景**
- 当需要发送整个实体对象给服务器时(比如创建新资源),推荐使用 `@RequestBody`。
- 如果只是想附加一些过滤条件、分页信息或者其他控制变量,则更适合采用 `@RequestParam`[^7]。
3. **默认行为**
- 使用 `@RequestParam` 时如果指定名称的参数不存在,默认会抛出异常;可以通过设置 required=false 避免这种情况发生[^8]。
- 而对于 `@RequestBody`, 若未提供任何内容则可能返回 Bad Request 错误状态码(400)[^9].
4. **性能考量**
解析大块JSON可能会消耗更多计算资源相比读取少量URL参数而言因此在设计API接口时候应该考虑实际需求来决定选用哪种注解[^10].
#### 总结
两者各有侧重,在开发过程中应依据具体业务逻辑合理选择合适的注解以达到最佳实践效果.
阅读全文
相关推荐



















