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

SpringMvc中的请求参数传递和mybatis中的参数传递

1.SpringMvc中的请求参数传递:

1.1 请求行中的参数传递:

传递单个值:

传递的值和形参上的形参名称要匹配,否则使用@RequestParam(value = "xxx")注解进行指定

传递对象属性对象作为接收:对象需要无参构造器和setter方法进行接收

传递的值要和对象的属性名称要一样进行匹配,SpringMvc底层会创建一个pojo对象然后调用其setter方法进行赋值操作

传递复合型参数进行传递:

传递和接收是一个数组类型:

传递的是一个集合类型和接收的是一个集合类型:注意要写@RequestParam这个注解

1.2请求体中进行参数传递

json格式中[]代表数组或者集合,{}代表一个对象

请求体中获取数据需要配合@RequestBody注解

1.3请求映射底层原理

传输数据不是json时

1.SpringMVC 先创建一个 `Student` 对象
它发现你方法需要 `Student student`,于是会使用 `new Student()` 调用无参构造方法,先创建对象。
2. 读取所有请求参数:比如 `username=dill`
SpringMVC 内部会遍历这些参数,然后尝试找有没有匹配的属性。
3. 用属性名匹配类中的属性名(JavaBean 规范)
请求参数叫 `username`,它去找 Student 类有没有:
成员变量 `private String username`
有没有对应的 `setUsername(String xxx)` 方法(JavaBean setter 方法)
它发现你方法需要 `Student student`,于是会使用 `new Student()` 调用无参构造方法,先创建对象。
4.所有匹配成功的字段都会被自动注入进来

总结一句话回答:SpringMVC 使用 `WebDataBinder` 实现请求参数到 JavaBean 的属性封装。它通过反射机制查找对应的 setter 方法,根据请求参数名与 JavaBean 属性名的匹配关系自动赋值。传输数据时json时

SpringMVC 检测到你用了 `@RequestBody`说明你要从 **请求体中** 获取数据(而不是传统的表单参数)它检查请求头的 `Content-Type` 是 `application/json`所以就知道请求体是 JSON 格式
SpringMVC 会调用 `HttpMessageConverter` 中的 **Jackson 转换器**
默认就是 `MappingJackson2HttpMessageConverter`,它会用 **Jackson** 来把 JSON 转成 Java 对象,它就把 JSON 转成了 `Student` 对象,并传给你的方法

总结一句话:

当传递 `JSON` 数据时,`SpringMVC` 使用 `@RequestBody` 和 `HttpMessageConverter` 消息转化器 机制,将 JSON 请求体自动反序列化为 Java 对象,底层默认使用的是 `MappingJackson2HttpMessageConverter`。

参数传递实现

前端参数传递是url拼接参数或表单参数,使用`@RequestParam`注解,`json`格式的数据使用`@RequestBody`接收,普通类型参数类型通过`Converter<S, T>`这个接口进行类型转化,json格式的参数通过`HttpMessageConverter`自动反序列化成对象,实现参数传递

1.4响应和底层流程

⭐响应实现流程 和 `ResponseBody`的作用

SpringMVC在响应阶段,会根据处理器方法的返回类型和是否标注@ResponseBody注解,自动选择合适的处理方式。

- 如果方法上加了@ResponseBody,SpringMVC会使用HttpMessageConverter(如Jackson)将返回对象或集合序列化为JSON格式输出。如果返回的是字符串,则作为纯文本响应。
- 如果方法没有加@ResponseBody,并返回一个字符串,SpringMVC会通过视图解析器(ViewResolver)将字符串作为视图名,查找对应页面跳转。
- 本质上,SpringMVC通过HttpMessageConverter和ViewResolver这两套机制,统一管理了数据响应和页面跳转。

http://www.jsqmd.com/news/675656/

相关文章:

  • 1995-2021年省级财政数据清洗实战:从混乱文本到规整面板数据(以转移支付为例)
  • SenseVoice Small从零开始:轻量模型+Streamlit WebUI完整部署
  • 支付宝立减金回收的几种方式(安全高效不浪费) - 米米收
  • 【实战】Android CTS兼容性测试:从环境搭建到结果解析全流程指南
  • MLX90640红外热像仪API实战:从STM32读取到温度矩阵显示的完整流程
  • Phi-3.5-Mini-Instruct创意工作流:文案策划+脚本生成+多轮迭代对话实践
  • 【CrewAI系列3】8 分钟,我用 CrewAI 创建了第一个 AI 员工
  • SolidWorks模型转URDF避坑指南:从零搭建ROS巡线小车的完整流程(含常见报错解决)
  • 写一篇文章 关于苹果官宣库克卸任CEO 属于他的时代结束了
  • MeterSphere性能测试模块部署避坑指南:ZooKeeper、Kafka、Node-Controller怎么装?
  • 如何解决RAC环境下的脑裂问题_Voting Disk表决磁盘与仲裁机制
  • 从USB到GPIB:如何用NI GPIB-USB-HS转换器为你的笔记本电脑搭建便携式测试工站
  • 2026年|AI率太高怎么降?必备这10款降AI工具,高效降低AI率(含免费降AI工具) - 降AI实验室
  • 2026年质量好的rfid标签厂家推荐哪家好 - 品牌宣传支持者
  • 别再只调单一模型了!手把手教你用PyTorch实现多模态融合(从早期融合到联合融合实战)
  • DownKyi终极指南:5分钟掌握B站视频高效下载与批量处理技巧
  • 别再乱用ram_style了!Vivado综合BRAM与LUTRAM的实战避坑指南
  • KVM虚拟化实战宝典 | 从面试核心到运维命令全解析
  • 百度网盘限速破解:3分钟学会高速下载的实用技巧
  • 2026年比较好的橡胶除臭剂/涂料除臭剂/pom除臭剂/除臭剂精选厂家推荐 - 行业平台推荐
  • 5分钟掌握大麦抢票自动化:Python脚本终极使用指南
  • 【AI面试临阵磨枪】解释 AI Agent 与普通 Chatbot、自动化脚本的本质区别
  • 原神帧率解锁完全指南:如何轻松突破60FPS限制
  • 深入探索:如何解锁NVIDIA驱动的隐藏力量?
  • 2026停车场照明品牌:探索高效节能与智能控制新方向 - 品牌排行榜
  • Vivado隐藏技巧:用JTAG to AXI Master IP给你的ZYNQ PL侧做个“软件遥控器”
  • 2026年知名的定做保温饭盒/上班族保温饭盒/双层保温饭盒源头厂家推荐 - 品牌宣传支持者
  • Phi-3-vision-128k-instruct C盘清理优化:释放空间与系统提速实战
  • 无线感知研究入门:手把手教你用CSI Tool搭建双机Monitor模式测试环境
  • 2026年热门的铝木系系统门窗/定制系统门窗/铝合金系统门窗/高端别墅系统门窗稳定供应商推荐 - 行业平台推荐