本文纲要

  • 一、请求
    1、请求参数
    补充:GET请求中文乱码问题 补充:POST请求中文乱码问题
    2、不同类型参数传递
    补充:@RequestParam注解
    3、JSON数据参数
    补充:@EnableWebMvc注解
  • 补充:@RequestBody注解
    补充:@RequestBody与@RequestParam区别
    4、日期类型参数传递
    补充:@DateTimeFormat注解
    5、类型转换实现原理


  • 二、响应
    1、基础准备
    2、响应页面
    3、返回文本数据
    4、响应JSON数据
    补充:@ResponseBody注解

进入正文:

一、请求

1、请求参数

  • ① GET发送单个参数

【Spring MVC-请求与响应:参数,响应,注解】_请求参数

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

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_02

  • ② GET发送多个参数

【Spring MVC-请求与响应:参数,响应,注解】_JSON_03

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

【Spring MVC-请求与响应:参数,响应,注解】_数据_04

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

【Spring MVC-请求与响应:参数,响应,注解】_JSON_05

IDEA中的Tomcat插件目前只到Tomcat7,所以存在中文乱码现象。Tomcat8.5以后的版本已经处理了中文乱码的问题。

IDEA中,我们通过修改pom.xml来处理中文乱码问题,添加<uriEncoding>UTF-8</uriEncoding>,如下:

【Spring MVC-请求与响应:参数,响应,注解】_JSON_06

  • ③ POST请求发送参数

类型信息格式设置:Content-Type对应application/x-www-form-urlencoded

与GET请求一致,可以直接使用参数接收。


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

通过配置CharacterEncodingFilter处理,如下:

【Spring MVC-请求与响应:参数,响应,注解】_数据_07

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

【Spring MVC-请求与响应:参数,响应,注解】_数据_08


2、不同类型参数传递

  • ① 普通参数

要求:参数名与形参变量名相同,具体案例上面已经呈现。


补充:参数名与形参变量名不同的情形,如下:

【Spring MVC-请求与响应:参数,响应,注解】_JSON_09

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

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_10

写上@RequestParam注解框架就不需要自己去解析注入,能提升框架处理性能。

  • ② POJO数据类型

基础准备,构造User类,如下:

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_11

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

【Spring MVC-请求与响应:参数,响应,注解】_数据_12

  • ③ 嵌套POJO数据类型

基础准备,构造User、Address类,如下:

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_13

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

【Spring MVC-请求与响应:参数,响应,注解】_数据_14


接收参数的代码不变,此处省略。


  • ④ 数组类型参数

请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数,如下:

【Spring MVC-请求与响应:参数,响应,注解】_JSON_15


接收代码如下:

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_16

  • ⑤ 集合类型参数

请求发送逻辑不变,与上方一致,此处省略。

接收代码使用集合作为形参,如下:

【Spring MVC-请求与响应:参数,响应,注解】_数据_17

参数接收是按照属性填充的,而集合类型的属性(如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转换所需依赖,如下:

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_18

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

【Spring MVC-请求与响应:参数,响应,注解】_JSON_19

  • ③ 参数接收

Ⅰ JSON普通数组,如下:

【Spring MVC-请求与响应:参数,响应,注解】_JSON_20

Ⅱ JSON对象,如下:

【Spring MVC-请求与响应:参数,响应,注解】_数据_21

Ⅲ JSON对象数组,如下:

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_22

补充:@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标准的日期形式,我们直接接收即可,如下:

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_23

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

【Spring MVC-请求与响应:参数,响应,注解】_JSON_24

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

【Spring MVC-请求与响应:参数,响应,注解】_数据_25

补充:@DateTimeFormat注解

作用在形参位置,设定日期时间型数据格式。

5、类型转换实现原理

  • org.springframework.core.convert.converter.Converter接口

【Spring MVC-请求与响应:参数,响应,注解】_JSON_26

  • ② @EnableWebMvc注解

为了各类Converter能够生效,我们需要在SpringMVC的配置类上使用该注解。


二、响应

1、基础准备

  • ① 编写page.jsp

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_27

2、响应页面

不使用@ResponseBody注解,返回String类型,如下:

【Spring MVC-请求与响应:参数,响应,注解】_JSON_28

3、返回文本数据

使用@ResponseBody注解,如下:

【Spring MVC-请求与响应:参数,响应,注解】_数据_29

4、响应JSON数据

  • ① 响应JSON对象

需要使用@ResponseBody注解,另外在配置类上开启@EnableWebMvc注解,如下:

【Spring MVC-请求与响应:参数,响应,注解】_JSON_30

  • ② 响应JSON对象集合

【Spring MVC-请求与响应:参数,响应,注解】_请求参数_31

补充:@ResponseBody注解

作用在方法/类上,设置当前控制器返回值作为响应体:

Ⅰ 方法的返回值为字符串,会将其作为文本内容直接响应给前端;

Ⅱ 方法的返回值为对象,会将对象转换成JSON响应给前端。

内部还是通过Converter接口的实现类完成的,对象转Json数据(POJO -> json),集合转Json数据(Collection -> json)。


三、结尾

以上即为Spring MVC-请求与响应的全部内容