SpringBoot参数绑定
SpringBoot的参数绑定问题
重要
@RequestBody 用于接收 JSON 格式的请求体(通常来自 POST/PUT 请求)
@GetMapping,使用的是 URL 查询参数(query parameters)
| 场景 | 方法 | 注解 |
|---|---|---|
| GET 查询(带条件+分页) | URL 参数 | ❌ 不要 @RequestBody,✅ 直接用对象 + @RequestParam |
| POST/PUT 提交数据 | JSON 请求体 | ✅ 必须用 @RequestBody |
GET 查询(带条件 + 分页)
Spring 的 @RequestBody 用法
GET / selectPage?name=维修&pageNum=2&pageSize=5
Spring MVC 会自动:
- 把 name=维修 绑定到 serviceType.setName("维修")
- 把 pageNum=2 绑定到 pageNum 参数(默认值为 1)
- 把 pageSize=5 绑定到 pageSize 参数(默认值为 10)
@GetMapping("/service/page")
public Result selectPage(
ServiceType serviceType, // 自动绑定 ?name=xxx
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize
) {
PageInfo<ServiceType> page = serviceService.selectPage(serviceType, pageNum, pageSize);
return Result.success(page);
}注意
错误!不要这样写!
public Result selectPage(@RequestBody ServiceType serviceType, ...)
@GetMapping 中使用 @RequestBody
→ 报错:Required request body is missing(GET 请求无 body)
POST 提交 JSON
Spring 的 @RequestBody 用法
@RequestBody 用于将 HTTP 请求体中的 JSON 数据 自动反序列化为 Java 对象,仅适用于 POST、PUT、PATCH 等带有请求体的请求方法。
@PostMapping("/service")
public Result create(@RequestBody @Valid ServiceType serviceType) {
serviceTypeService.save(serviceType);
return Result.success();
}
前端请求示例(Content-Type: application/json):
{
"name": "家电清洗",
"description": "包含空调、油烟机等"
}注意
@RequestBody ≠ 所有“传对象”的场景,它只用于 JSON 请求体!
版权所有
版权归属:念宇
