在写分页查询接口的时候,使用了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=123id 的值会被绑定到方法参数中。

2. @RequestBody

  • 作用:用于从 请求体 中提取数据,通常用于处理 JSON 或 XML 格式的数据。

  • 适用场景

    • 获取请求体中的数据,例如:POST 请求中传递的 JSON 对象。
  • 数据格式

    • 请求体中的数据通常是 JSON 或 XML 格式,例如:{"name": "John", "age": 25}
    • Spring 会自动将 JSON 数据反序列化为 User 对象。
  • 示例

@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=25JSON、XML 等结构化数据
典型场景获取单个或多个简单参数获取复杂的对象或数据结构