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这两套机制,统一管理了数据响应和页面跳转。
