一、SpringMVC入门
1.1 介绍
SpringMVC将Servlet一些通用功能进行了抽取和封装,使用它之后,代码主要有两部分组成:
前端控制器:由SpringMVC提供,主要负责接收参数和返回数据
处理器:由程序员编写,主要负责参数的处理和业务层(service层)调用

1.2 ⭐入门案例⭐
需求:发送一个请求name=张三&age=18,后台接收参数,封装一个User对象返回json数据
步骤分析:
创建web工程,添加依赖
添加web环境的初始类和核心配置类
创建实体类
创建处理器
部署项目到Tomcat
1.2.1 创建web工程
创建模块,换换为web工程,添加依赖

<dependencies>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--springmvc核心-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.16</version>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
</dependencies>
1.2.2 加载配置类
在项目中添加web环境的初始类和核心配置
1.2.3 创建实体类
准备一个实体类,用于封装返回结果

1.2.4 创建处理器

1.2.5 部署项目
将项目部署到tomcat,浏览器访问
http://localhost:8080/user/demo1?name=张三&age=18
,观察效果

1.3 执行流程

1.4 注解
1.4.1 @RequestMapping
@RequestMapping注解用于建立请求URL和处理方法之间的对应关系, 常见属性如下:
value: 等同于path,用于为当前方法绑定访问路径
method:用于限制请求类型,如果省略此选项,代表不对请求类型做限制
注意:此注解可以标注在方法上,也可以标注在类上,标注在类上代表类中的所有方法都可以共用一段URL

value:设置请求路径 用于给当前方法指定访向路径,支持数组的写法,代表可以给一个方法绑定多个路径

浏览器访问http://localhost:8080/user/demo2?name=张三&age=18
,观察效果:

浏览器访问http://localhost:8080/user/demo3?name=张三&age=18
,观察效果,value中未绑定"/demo3",所以未找到路径。

method:设置请求方式 限制当前方法可以接收的请求类型,支持教组的与法,代表可以同时接收多种录求方式:如果method属性省略,代表可以接收所有类型请求

令method = RequestMethod.POST,重新部署,浏览器访问http://localhost:8080/user/demo2?name=张三&age=18
,观察效果:(浏览器地址栏只支持get方法,所以使用post方法会报错405-方法不允许)


1.4.2 @ResponseBody
@ResponseBody注解用于将方法返回值直接响应给浏览器,如果返回值类型是对象或集合,将会转换为JSON格式响应
位置:Controller方法上/类上(如果标在类上,代表类中所有方法上都生效)
简化:@RestController = @Controller + @ResponseBody

二、postman
Postman是一款功能强大的接口调试工具

三、接收请求参数
在SpringMVC中,可以使用多种数据类型来接收前端传入的参数
3.1 简单参数
需要保证前端传递的参数名称跟方法的形参名称一致
请求:

代码:

3.2 对象参数(参数较多时使用更方便)
需要保证前端传递的参数名称跟实体类的属性名称一致
类需要实现序列化接口
请求:

代码:

3.3 数组参数(一个名字对应多个值)
需要保证前端传递的参数名称跟方法中的数组形参名称一致
请求:

代码:

3.4 集合参数(一个名字对应多个值)
请求参数名与形参集合名称相同且请求参数为多个,使用
@RequestParam(参数名字)
绑定参数关系
请求:

代码:

3.5 日期参数
接收参数为日期类型,需要使用
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
定义参数格式
请求:

代码:

3.6 Json参数
SpringMVC也可以接收请求体中的json字符串为参数,并且自动封装为指定对象
在post请求方式下,使用请求体传递Json格式数据
使用注解@RequestBody对象类型
请求:

代码:

3.7 路径参数
springmvc还支持通过请求路径直接传递参数,后台使用{...}来标识该路径参数,需要使用
@PathVariable(name = {占位参数})
获取
请求:

代码:

3.8 @RequestParam
@RequestParam标注在方法参数之前,用于对传入的参数做一些限制,常见属性如下:
name:用于指定前端传入的参数名称
defaultValue:当参数为非必传参数且前端没有传入参数时,指定一个默认值
请求:

代码:
@RequestParam:指定请求参数的名称

三、统一异常处理
使用SpringMVC后,异常就不必在三层代码去处理了,而是直接抛给框架,框架会将所有的异常统一转交给我们自定义的统一异常处理类来处理。
SpringMVC支持下面两个注解来实现全局异常处理(Aop的思想,对web层环绕通知)
@RestControllerAdvice 标注在类上,声明当前类是一个用于专门处理异常的类
@ExceptionHandler 标注在方法上,声明当前方法可以处理哪些异常

3.1 模拟异常

3.2 全局异常处理


运行结果:

四、Restful
REST是一种软件架构风格,其强调HTTP应当以资源为中心[在请求地址中尽量的不要出现动词]。
REST规范了HTTP请求动作,使用四个词语分别表示对资源的CRUD操作: GET(获取)、POST(新增)、PUT(更新)、DELETE(删除)

4.1 查询列表
请求:

代码:

4.2 根据id查询
请求:

代码:

4.3 添加
请求:

代码:

4.4 删除
请求:

代码:

五、总结
5.1 SpringMVC 注解
@RequestMapping:用于映射请求路径,可以定义在类和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json数据转换为Java对象
@RequsetParam:指定请求参数的名称
@PathViriable:从请求路径中获取请求参数(/user/{id}),传递给方法的形式参数
@ResponseBody:注解实现将controller方法返回对象转化为json对象相应给客户端
@RequestHeader:获取指定的请求头数据
@RestController= @Controller + @ResponseBody
5.2 接收请求参数

5.3 响应码状态
1:信息
2:200 ------ 成功
3:301 ------ 重定向
4:400 ------ 参数有问题
401 ------ 没有认证
403 ------ 权限不足
404 ------ 资源找不到
405 ------ 方法不支持
5:500 ------ 服务器错误
503 ------ 超时