@RequestParam和@RequestBody区别(错误使用@RequestBody导致查询参数错误)
在写分页查询接口的时候,使用了String来结合查询条件。因为错误使用了@RequestBody注解导致实际接受到的String参数为:{"roleName": "条件"}
。
@GetMapping("/{current}/{size}")
public R pageList(@RequestParam(required = false) String roleName, @PathVariable("current") int current, @PathVariable("size") int size) {
Page<Role> pageInfo = new Page<>(current, size);
QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
if (!StrUtil.isBlank(roleName)) {
queryWrapper.like("name", roleName);
}
Page<Role> page = roleService.page(pageInfo, queryWrapper);
return R.success(page);
}
将@RequestBody修改为@RequestParam恢复正常,但是在提交参数时,需要将请求体的请求内容改为form-data格式。
@RequestParam和@RequestBody区别
1. @RequestParam
-
作用:用于从 URL 查询参数 或 表单数据 中提取参数。
-
适用场景:
-
获取 URL 中的查询参数,例如:
/user?id=123
。 -
获取表单提交的数据(
application/x-www-form-urlencoded
)。
-
-
数据格式:
- 参数以键值对的形式传递,例如:
name=John&age=25
。
- 参数以键值对的形式传递,例如:
-
示例:
@GetMapping("/user")
public String getUser(@RequestParam("id") Long id) {
return "User ID: " + id;
}
- 请求 URL:
/user?id=123
,id
的值会被绑定到方法参数中。
2. @RequestBody
-
作用:用于从 请求体 中提取数据,通常用于处理 JSON 或 XML 格式的数据。
-
适用场景:
- 获取请求体中的数据,例如:POST 请求中传递的 JSON 对象。
-
数据格式:
- 请求体中的数据通常是 JSON 或 XML 格式,例如:
{"name": "John", "age": 25}
。 - Spring 会自动将 JSON 数据反序列化为
User
对象。
- 请求体中的数据通常是 JSON 或 XML 格式,例如:
-
示例:
@PostMapping("/user")
public String createUser(@RequestBody User user) {
return "User created: " + user.getName();
}
主要区别
特性 | @RequestParam | @RequestBody |
---|---|---|
数据来源 | URL 查询参数或表单数据 | 请求体(通常是 JSON 或 XML) |
适用请求类型 | GET、POST(表单提交) | POST、PUT 等(通常用于传递复杂数据) |
数据格式 | 键值对(name=John&age=25 ) | JSON、XML 等结构化数据 |
典型场景 | 获取单个或多个简单参数 | 获取复杂的对象或数据结构 |
本文是原创文章,转载请注明来自 Lazyking.site
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果
Steam卡片