@RequestBody与@RequestParam的区别

@RequestBody会将请求体中的数据,转换成对象

@RequestParam会从http请求查询参数中提取数据

@RequestParam和@RequestBody是Spring Framework中用于处理HTTP请求的注解,它们有以下区别:

1.数据来源:

  • @RequestParam: 从HTTP请求的查询参数中提取数据,即从URL中的?key=value形式的参数中获取数据。
  • @RequestBody: 从HTTP请求的请求体(body)中提取数据,通常用于接收JSON、XML等格式的数据。

2.用法:

  • @RequestParam: 通常用于处理GET请求或POST请求中的表单数据,例如?name=John&age=30这样的查询参数。
  • @RequestBody: 通常用于处理POST请求中的非表单数据,例如JSON格式的数据,或者XML格式的数据。

3.数据格式:

  • @RequestParam: 提取的数据一般是简单类型,如字符串、整数等。
  • @RequestBody: 提取的数据可以是复杂类型,如自定义的Java对象、Map、List等,通常是用于反序列化JSON或XML数据为Java对象。

举个例子来说,假设有一个HTTP POST请求,请求体中包含JSON格式的数据:

{
  "name": "John",
  "age": 30
}

使用@RequestBody可以将这个JSON数据转换成Java对象:

@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
    // 处理用户创建逻辑
    return ResponseEntity.ok(user);
}

而如果是一个HTTP GET请求,包含查询参数:
/api/users?id=123

使用@RequestParam可以提取id参数的值:

@GetMapping("/api/users")
public ResponseEntity<User> getUserById(@RequestParam("id") Long userId) {
    // 根据用户ID查询用户信息
    User user = userRepository.findById(userId);
    if (user != null) {
        return ResponseEntity.ok(user);
    } else {
        return ResponseEntity.notFound().build();
    }
}

总的来说,@RequestParam适用于提取简单的查询参数,而@RequestBody适用于处理复杂的非表单数据。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 15:32:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 15:32:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 15:32:06       82 阅读
  4. Python语言-面向对象

    2024-04-05 15:32:06       91 阅读

热门阅读

  1. EasyPOI导出动态表头

    2024-04-05 15:32:06       36 阅读
  2. Springboot集成hanlp快速入门demo

    2024-04-05 15:32:06       42 阅读
  3. 题目 1752: 对称矩阵

    2024-04-05 15:32:06       34 阅读
  4. Spring Boot集成Spring Retry快速入门Demo

    2024-04-05 15:32:06       36 阅读
  5. 深入理解nginx mp4流媒体模块[下下]

    2024-04-05 15:32:06       38 阅读
  6. Day.21

    2024-04-05 15:32:06       40 阅读
  7. 教你如何在 WebView 中实现优雅的后退键处理

    2024-04-05 15:32:06       30 阅读
  8. C# 委托与事件 深入

    2024-04-05 15:32:06       30 阅读
  9. 金融科技包含领域

    2024-04-05 15:32:06       32 阅读
  10. [环境配置]conda 64位安装32位python

    2024-04-05 15:32:06       35 阅读
  11. LeetCode的使用方法

    2024-04-05 15:32:06       29 阅读
  12. 初学者如何入门深度学习?

    2024-04-05 15:32:06       46 阅读
  13. TypeScript:泛型

    2024-04-05 15:32:06       41 阅读