当前位置: 首页 > news >正文

Spring MVC 如何自动将请求参数映射到 Controller 方法的参数对象(POJO)上?

Spring MVC 能够自动将请求参数映射到 Controller 方法的参数对象(POJO)上,主要依靠以下几种机制:

1. 基于名称的匹配 (Name-based Binding):

这是最常见的也是默认的映射方式。Spring MVC 会检查请求中的参数名是否与 Controller 方法参数对象中的属性名匹配。如果匹配,它会将请求参数的值转换为相应的类型并设置到 POJO 的属性中。

  • 匹配规则:

    • 请求参数名必须与 POJO 中的属性名完全一致(大小写敏感,除非自定义绑定)。
    • 对于嵌套对象,可以使用点号(.)来访问深层属性,例如:user.firstName
  • 示例:

    // Controller
    @PostMapping("/users")
    public String createUser(@ModelAttribute("user") User user) {// ...
    }// POJO
    public class User {private String firstName;private String lastName;private String email;// Getters and setters
    }// 请求
    // POST /users
    // firstName=John&lastName=Doe&email=john.doe@example.com
    

    在这个例子中,请求中的 firstNamelastNameemail 参数会被自动映射到 User 对象的相应属性上。

2. @RequestParam 注解:

@RequestParam 注解可以显式的指定请求参数与 Controller 方法参数之间的映射关系。它允许你使用不同的参数名,或者将请求参数绑定到基本数据类型或 String 类型。

  • 作用:

    • 指定请求参数的名称,与方法参数名不同时使用。
    • 指定参数是否必需。
    • 设置默认值。
  • 示例:

    @GetMapping("/products")
    public String listProducts(@RequestParam(value = "page", defaultValue = "1") int page,@RequestParam(value = "size", required = false) Integer size
    ) {// ...
    }
    

    在这个例子中,page 参数的默认值为 1,size 参数是可选的。

3. @PathVariable 注解:

@PathVariable 注解用于将 URL 中的占位符变量绑定到 Controller 方法的参数上。

  • 作用:

    • 从 URL 路径中提取参数值。
  • 示例:

    @GetMapping("/users/{userId}")
    public String getUser(@PathVariable("userId") Long userId) {// ...
    }// URL: /users/123
    // userId = 123
    

4. @RequestBody 注解:

@RequestBody 注解用于将请求体(例如 JSON 或 XML)的内容绑定到 Controller 方法的参数上。通常与 POST、PUT 等请求一起使用。

  • 作用:

    • 将请求体的内容反序列化为 Java 对象。
  • 示例:

    @PostMapping("/users")
    public String createUser(@RequestBody User user) {// ...
    }// 请求
    // POST /users
    // Content-Type: application/json
    // {
    //   "firstName": "John",
    //   "lastName": "Doe",
    //   "email": "john.doe@example.com"
    // }
    

    在这个例子中,请求体中的 JSON 数据会被反序列化为 User 对象。

5. DataBinder:

Spring MVC 使用 DataBinder 接口来执行实际的绑定过程。DataBinder 负责将请求参数的值转换为相应的 Java 类型,并设置到目标对象中。

  • Spring MVC 提供了默认的 DataBinder 实现,可以处理常见的类型转换,例如 String 到 Integer, Date 等。
  • 我们也可以自定义 DataBinder 来处理特殊的类型转换或验证需求。

6. 类型转换器 (Type Converters):

Spring MVC 使用类型转换器来实现不同类型之间的转换。它提供了一组默认的类型转换器,例如 String 到 Integer、String 到 Date 等。

  • 我们可以自定义类型转换器来处理特定的类型转换需求。

总结:

Spring MVC 通过上述机制实现了请求参数到 Controller 方法参数的自动映射,极大的简化了开发过程,提高了代码的可读性和维护性。开发者可以根据实际需求选择合适的注解和配置来实现参数绑定。

关键点:

  • 名称匹配: 最常见的映射方式,要求请求参数名和 POJO 属性名一致。
  • 注解: @RequestParam, @PathVariable, @RequestBody 等注解提供了更灵活的参数绑定方式。
  • DataBinder: 负责实际的绑定过程,包括类型转换和设置属性值。
  • 类型转换器: 用于将请求参数值转换为相应的 Java 类型。

相关文章:

  • 把其他conda的env复制到自己电脑的conda上
  • 【ULMD】基于单峰标签生成和模态分解的多模态情感分析
  • Java大师成长计划之第13天:Java中的响应式编程
  • Python实现NOA星雀优化算法优化BP神经网络分类模型项目实战
  • P56-P60 统一委托,关联游戏UI,UI动画,延迟血条
  • CSS Border 三角形阴影与多重边框的制作
  • ROS2:自定义接口文件(无废话)
  • 第100+40步 ChatGPT学习:R语言实现多轮建模
  • 使用Homebrew下载配置git和连接GitHub(Mac版)
  • dubbo限流
  • VMware Fusion安装win11 arm;使用Mac远程连接到Win
  • 使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书
  • 论文速读《Embodied-R: 基于强化学习激活预训练模型具身空间推理能力》
  • 如何添加或删除极狐GitLab 项目成员?
  • Codeforces Round 1023 (Div. 2)
  • 代码随想录训练营第十八天| 150.逆波兰表达式求值 239.滑动窗口最大值 347.前k个高频元素
  • 什么是gitlab自动部署,怎么配置gitlab自动部署
  • QGIS分割平行四边形
  • 分布式、高并发-Day04
  • 白平衡色温坐标系下自适应计算白点权重的方法
  • 成立6天的公司拍得江西第三大水库20年承包经营权,当地回应
  • 李云泽:大型保险集团资本补充已经提上日程
  • 象屿集团:对去化压力大、市场有效需求不足区域坚决暂停投资,打造多元上市路径
  • IPO周报|节后首批3只新股本周申购,色谱设备龙头来了
  • 繁荣活跃!“五一”假期全国重点零售和餐饮企业销售额同比增长6.3%
  • 美权威人士批“特朗普对进口电影征关税”:将杀死美电影产业