学习目标
- 掌握基于 SpringMVC 获取请求参数与响应 json 数据操作
- 熟练应用基于 REST 风格的请求路径设置与参数传递
- 能够根据实际业务建立前后端开发通信协议并进行实现
- 基于 SSM 整合技术开发任意业务模块功能
1 SpringMVC 简介
1.1 概述
1.1.1 web程序开发流程

【执行过程】
web 程序通过浏览器访问页面,前端页面使用异步提交的方式发送请求到后端服务器;
后端服务器采用表现层、业务层、数据层的三层架构的形式进行开发,页面发送的请求由表现层接收,获取用户的请求参数后,将参数传递到业务层,再由业务层访问数据层,得到用户需要访问的数据后,将数据返回给表现层,表现层拿到数据,将数据转换成 json 格式发送给前端页面;
前端页面接收数据后解析数据,并组织成用户浏览的最终页面信息交给浏览器
1.1.2 SpringMVC 概述
一种基于 Java 实现 MVC 模型的轻量级 Web 框架,是表现层框架技术,用于进行表现层功能开发
1.2 入门案例
1.2.1 代码开发




1.2.2 注解介绍


1.3 入门案例工作流程分析

1.4 Controller 加载控制



简化开发

1.5 PostMan
网页调试与发送网页 HTTP 请求的插件,用于接口测试
【注】这类插件有很多,比如 YApi 等,可自行选择一个合适的工具
2 请求与响应
2.1 请求映射路径
为避免多个模块下的请求路径发生冲突,需要设置模块名作为请求路径前缀

2.2 请求参数
2.2.1 Get 请求

2.2.2 Post 请求


2.2.3 五种参数类型传递
普通参数

【注】如果地址参数和形参变量名不相同,可以采用 @RequestParam 注解的方式 可以实现请求参数和形参的绑定
public String commonParam(@RequestParam("name") String userName,int age)

POJO 类型参数


【注】请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
嵌套 POJO 类型参数


【注】 请求参数名与形参对象属性名相同,按照对象层次结构关系接收嵌套POJO属性参数
数组类型参数


【注】请求参数名与形参对象属性名同且请求参数为多个,定义数组类型形参即可接收参数
集合类型参数

2.2.4 json 数据传递






传递 json 对象

传递 json 数组


2.3 日期类型参数传递


内部转换工作过程:利用 Converter 接口

2.4 响应 json 数据




内部转换工作过程:HttpMessageConverter 接口

【注】和上述 Converter 接口功能一样,只是转换的东西不一样,这个是用来转换 http 的消息, 并不是一个类型转换到另一个类型
3 REST 风格
3.1 REST 简介

【注】REST 风格描述的是一种资源的访问形式, 根据 REST 风格对资源进行访问称为RESTful

【注】① 通过上述约定,通过路径和请求的方式就可以确认一个资源的访问行为。② 描述模块的名称通常使用复数,也就是加 s 的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts.....
3.2 RESTful 入门案例





3.3 REST 快速开发
问题描述:
当前程序仍然存在代码冗余

代码简化:


3.4 案例:基于 RESTful 页面数据交互


