@RequestParam和@RequestBody区别

103 阅读1分钟

@RequestParam@RequestBody 是 Spring 框架中用于处理 HTTP 请求参数的两个常见注解,而在某些情况下,你可能不需要显式地使用这些注解。以下是它们的主要用途和区别:

  1. @RequestParam
  • 用途: 适用于从请求的 URL 中获取参数,通常用于处理查询字符串参数。
  • 例子: http://example.com/api/resource?param1=value1&param2=value2,其中 param1param2 是通过 @RequestParam 获取的参数。
@GetMapping("/api/resource")
public Result getResource(@RequestParam String param1, @RequestParam String param2) {
    // 方法实现
}
  1. @RequestBody
  • 用途: 适用于从请求体中获取参数,通常用于处理 POST、PUT 等请求,其中参数以 JSON 格式或其他格式作为请求体传递。
  • 例子: 请求体为 {"key": "value"},其中 key 是通过 @RequestBody 获取的参数。
@PostMapping("/api/resource")
public Result createResource(@RequestBody RequestDto requestDto) {
    // 方法实现
}

其中,RequestDto 是一个包含请求体参数的 Java 类。

  1. 不使用注解:

    • 用途: 在某些情况下,你可能不需要显式地使用这些注解,尤其是对于简单的 GET 请求,参数直接包含在 URL 中,而对于 POST 请求,你可能直接将参数作为方法的参数。
    • 例子:
@GetMapping("/api/simple")
public Result simpleGet(String param1, int param2) {
    // 参数 param1 和 param2 直接从 URL 中获取
}

@PostMapping("/api/simple")
public Result simplePost(String param1, int param2) {
    // 参数 param1 和 param2 直接从请求体中获取
}

总的来说,选择使用 @RequestParam 还是 @RequestBody 取决于你的需求和请求的特性。对于简单的查询字符串参数,使用 @RequestParam;对于复杂的请求体参数,使用 @RequestBody。在某些情况下,你甚至可以不使用注解,Spring 会根据方法参数的类型进行自动匹配。