springboot 接口参数接收,body和param什么区别,分别怎么使用
温馨提示:本文由ai生成,请注意辨别阅读,仅供思路参考
1. @RequestBody
和 @RequestParam
的区别
(1) 数据来源
-
@RequestBody
:接收HTTP请求的请求正文(Body)数据,通常是JSON格式。 -
@RequestParam
:接收HTTP请求的查询参数(URL参数)或表单参数。
(2) 数据格式
-
@RequestBody
:数据以JSON或XML等格式发送,适合复杂的对象数据。 -
RequestParam
:数据以键值对的形式发送,适合简单的参数。
(3) HTTP方法
-
@RequestBody
:通常用于POST、PUT、PATCH等需要传递大量数据的请求方法。 -
RequestParam
:适用于GET、DELETE、POST等方法,尤其是需要传递简单参数的场景。
(4) 数据类型
-
@RequestBody
:可以接收对象类型(Java Bean)或集合类型(List、Map等)。 -
RequestParam
:只能接收简单类型(String、Integer、Boolean等)。
2. @RequestBody
的使用
(1) 示例代码
@PostMapping("/api/user")
public ResponseEntity<User> createUser(@RequestBody User user) {// 业务逻辑处理return ResponseEntity.ok(user);
}
(2) 请求示例
发送一个JSON格式的POST请求:
curl -X POST -H "Content-Type: application/json" -d '{"id": 1,"username": "johnDoe","email": "john@example.com"
}' http://localhost:8080/api/user
(3) 使用场景
- 提交表单数据:适合传递复杂的对象数据。
- 创建或更新资源:用于RESTful API的POST、PUT请求。
- 传递JSON/XML数据:适合需要序列化为Java对象的场景。
3. @RequestParam
的使用
(1) 示例代码
@GetMapping("/api/users")
public ResponseEntity<List<User>> getUsers(@RequestParam(defaultValue = "1") int page,@RequestParam(defaultValue = "10") int size) {// 业务逻辑处理return ResponseEntity.ok(users);
}
(2) 请求示例
发送一个GET请求:
curl http://localhost:8080/api/users?page=1&size=10
(3) 使用场景
- 查询数据:用于分页、过滤、排序等场景。
- 删除资源:用于传递ID或其他标识符。
- 表单提交:适合简单的键值对数据。
4. 如何选择?
场景 | 推荐使用 | 原因 |
提交复杂数据 | | 适合JSON/XML格式的对象数据,方便映射到Java对象。 |
查询数据 | | 适合简单的查询参数,例如分页、过滤、排序。 |
创建/更新资源 | | RESTful API中常用于POST/PUT请求,传递资源的完整数据。 |
删除资源 | | 传递ID或其他标识符,适合DELETE请求。 |
表单提交 | | 适合简单的键值对数据,常用于GET和POST请求中的表单数据。 |
5. 总结
-
@RequestBody
:用于接收请求正文中的复杂数据,适合JSON/XML格式。 -
@RequestParam
:用于接收URL参数或表单参数,适合简单的键值对数据。
根据具体的业务需求和HTTP方法选择合适的注解,确保API接口的设计清晰且易于维护。