@requestbody和requestParam区别
时间: 2025-06-22 12:40:24 浏览: 19
### @RequestBody 和 @RequestParam 注解的区别
在 Spring MVC 中,`@RequestBody` 和 `@RequestParam` 是两种不同的注解,用于处理 HTTP 请求的不同部分。
#### 处理的数据位置不同
- **@RequestParam** 主要用于获取 URL 查询参数或表单提交的简单类型参数。这类参数通常位于 URL 后面作为查询字符串的一部分或者是 HTML 表单字段[^1]。
- **@RequestBody** 则是用来读取整个 HTTP 请求体的内容,并将其映射到方法参数上。这特别适合于接收 JSON 或 XML 形式的复杂对象数据[^3]。
#### 数据格式支持差异
- 对于 **@RequestParam** 而言,它能够很好地处理标准浏览器发送过来的传统形式编码(`application/x-www-form-urlencoded`)以及多部分/表单数据(`multipart/form-data`)类型的请求[^4]。
- 反之,当涉及到更复杂的媒体类型如 JSON (`application/json`) 或者 XML (`application/xml`) 时,则应采用 **@RequestBody** 进行解析并转换成相应的 Java 类型实例。
#### 使用场景举例说明
下面给出一段简单的代码片段来展示两者如何被应用:
```java
@RestController
public class ExampleController {
// 使用 @RequestParam 获取 GET 请求中的 query string 参数
@GetMapping("/example")
public String getExample(@RequestParam(value="name", required=false, defaultValue="World") String name){
return "Hello "+name;
}
// 使用 @RequestBody 接收 POST 请求携带的应用级负载 (JSON)
@PostMapping(path="/example", consumes="application/json")
public void postExample(@Valid @RequestBody MyObject myObj){
System.out.println(myObj);
}
}
```
这段代码展示了如何利用这两个注解分别针对不同类型的操作执行相应逻辑:前者是从路径 `/example?name=John` 提取出名字;后者则是接受来自客户端的一个 JSON 文档并反序列化为一个名为 `MyObject` 的实体类实例[^2]。
阅读全文
相关推荐


















