本文纲要
- 一、请求
1、请求参数
补充:GET请求中文乱码问题 补充:POST请求中文乱码问题
2、不同类型参数传递
补充:@RequestParam注解
3、JSON数据参数
补充:@EnableWebMvc注解 -
补充:@RequestBody注解
补充:@RequestBody与@RequestParam区别
4、日期类型参数传递
补充:@DateTimeFormat注解
5、类型转换实现原理
- 二、响应
1、基础准备
2、响应页面
3、返回文本数据
4、响应JSON数据
补充:@ResponseBody注解
进入正文:
一、请求
1、请求参数
- ① GET发送单个参数

直接使用参数接收即可,如下:

- ② GET发送多个参数

直接使用多个参数接收,如下:

补充:GET请求中文乱码问题

IDEA中的Tomcat插件目前只到Tomcat7,所以存在中文乱码现象。Tomcat8.5以后的版本已经处理了中文乱码的问题。
IDEA中,我们通过修改pom.xml来处理中文乱码问题,添加<uriEncoding>UTF-8</uriEncoding>,如下:

- ③ POST请求发送参数
类型信息格式设置:Content-Type对应application/x-www-form-urlencoded。
与GET请求一致,可以直接使用参数接收。
补充:POST请求中文乱码问题
通过配置CharacterEncodingFilter处理,如下:

org.springframework.web.filter.CharacterEncodingFilter在spring-web包中,因此我们需要添加此相关依赖。实际使用时spring-webmvc包中包含了spring-web包,如下:

2、不同类型参数传递
- ① 普通参数
要求:参数名与形参变量名相同,具体案例上面已经呈现。
补充:参数名与形参变量名不同的情形,如下:

通过@RequestParam注解处理,@RequestParam("name") String userName,如下:

写上@RequestParam注解框架就不需要自己去解析注入,能提升框架处理性能。
- ② POJO数据类型
基础准备,构造User类,如下:

请求参数与形参对象中的属性对应即可完成参数传递,如下:

- ③ 嵌套POJO数据类型
基础准备,构造User、Address类,如下:

请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数,如下:

接收参数的代码不变,此处省略。
- ④ 数组类型参数
请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数,如下:

接收代码如下:

- ⑤ 集合类型参数
请求发送逻辑不变,与上方一致,此处省略。
接收代码使用集合作为形参,如下:

参数接收是按照属性填充的,而集合类型的属性(如size、isEmpty等)并不适合接收参数。所以此处使用@RequestParam来完成内容映射。
补充:@RequestParam注解
- ① 作用
该注解用于形参位置,用来绑定请求参数与处理器方法形参间的关系。
- ② 常用属性
required:是否为必传参数(true/false);
defaultValue:参数默认值。
3、JSON数据参数
- ① 常见JSON数据类型
JSON普通数组:(["value1","value2","value3",...])
JSON对象:({key1:value1,key2:value2,...})
JSON对象数组:([{key1:value1,...},{key2:value2,...}])
- ② 基础准备
Ⅰ 引入JSON转换所需依赖,如下:

Ⅱ 开启SpringMVC注解支持,使用@EnableWebMvc注解,如下:

- ③ 参数接收
Ⅰ JSON普通数组,如下:

Ⅱ JSON对象,如下:

Ⅲ JSON对象数组,如下:

补充:@EnableWebMvc注解
作用在配置类上,开启SpringMVC多项辅助功能,此处为JSON数据转换。
补充:@RequestBody注解
作用在形参位置,将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次。
补充:@RequestBody与@RequestParam区别:
- ① 区别
Ⅰ @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】;
Ⅱ @RequestBody用于接收JSON数据【application/json】。
- ② 应用
Ⅰ 后期开发中,发送JSON格式数据为主,@RequestBody应用较广;
Ⅱ 如果发送非JSON格式数据,选用@RequestParam接收请求参数。
4、日期类型参数传递
- ① 常见日期类型
2022/4/23、2022-4-23、2022.4.23等等
- ② 参数接收
2022/4/23标准的日期形式,我们直接接收即可,如下:

其他特殊的类型我们可以使用@DateTimeFormat注解,如下:

如果日期带有详细时间,我们同样可以使用该注解,如下:

补充:@DateTimeFormat注解
作用在形参位置,设定日期时间型数据格式。
5、类型转换实现原理
- ①
org.springframework.core.convert.converter.Converter接口

- ② @EnableWebMvc注解
为了各类Converter能够生效,我们需要在SpringMVC的配置类上使用该注解。
二、响应
1、基础准备
- ① 编写page.jsp

2、响应页面
不使用@ResponseBody注解,返回String类型,如下:

3、返回文本数据
使用@ResponseBody注解,如下:

4、响应JSON数据
- ① 响应JSON对象
需要使用@ResponseBody注解,另外在配置类上开启@EnableWebMvc注解,如下:

- ② 响应JSON对象集合

补充:@ResponseBody注解
作用在方法/类上,设置当前控制器返回值作为响应体:
Ⅰ 方法的返回值为字符串,会将其作为文本内容直接响应给前端;
Ⅱ 方法的返回值为对象,会将对象转换成JSON响应给前端。
内部还是通过Converter接口的实现类完成的,对象转Json数据(POJO -> json),集合转Json数据(Collection -> json)。
三、结尾
以上即为Spring MVC-请求与响应的全部内容
















