前言
拦截器
每个接口都要弄强制登录就很麻烦
所以我们来统一处理
如果包冲突的话,就要排包
直接就是在pom的右边,排除红色的就可以了
入门
第一个是请求前处理,就是到达controller(目标方法)前
第二个是目标方法后执行
第三个基本不用
然后就是重写方法
返回true就是放行,返回false就是拦截
然后要把这个拦截器交给项目
这个就是注入拦截器,然后设置拦截路径,这个就是所有的请求响应都拦截
然后就是启动,随便访问一个请求
这样发现真的就拦截了
这里可以不用new出来,也可以@Autowired出拦截器
现在开始修改项目了
如何告诉前端呢----》response
这个就说明已经拦截了
然后先登录就没事了,就不会拦截了
这样也是可以的
因为这是第三方的,所以不一定被spring管理的,所以还是new吧
在resouces目录底下添加这个,那么启动的时候就是这个了
在第三方包上打断点,要先下载资源才可以断点
适配器
适配器就是一个转换的东西
比如把110V电压转换为220V
这样就可以适用很多东西了
Sil4j也是一个适配器
现在我们来实现一下
这个就是适配器了,现在看客户端如何去调用了
我们这个没有直接调用sprint方法,但是依然可以打印日志
有适配器的原因就是一开始没有设计好,所以用适配器来补偿
所以spring也是基于适配器实现的,因为原来用的是servlet
统一数据返回格式
统一数据返回格式也是在拦截器实现的,不然每个都写太麻烦了
然后就是继承,实现两个方法
然后加上注解@ControllerAdvice
第一个是是否要对返回结果进行重写
第二个是如何进行重写
body就是目标方法返回的结果,就是controller返回的结果
supports的两个参数就是对哪些controller进行处理的意思
直接返回true就是对所有的controller都进行处理
这样还真的返回了result结果了
如果原来是result类型,就不用分装了
但是有些时候controller返回string类型的时候,就会报错,我的没有报错,我们可以这样处理
就不会报错了
发生的原因是类型不匹配
统一异常处理
这些都会发生异常
还有就是我们可以对异常进行分类
这样状态码就变了
@ControllerAdvice就是这两种特殊bean
改图书管理系统代码
看的出来我们的项目出问题了
主要是统一结果返回把结果改变了
所以出错了
因为前端接受的时候我们没有看做为result返回,所以有错,改一下就可以了
如果不行就看看是不是缓存的问题
注意
如果controller返回的是String类型
但是前端接收到的还是String类型
为什么呢
objectMapper.writeValueAsString因为这个方法返回的是String,是json字符串—》不能获取里面的数据
spring会对我们的字符串不进行处理,返回是字符串就是字符串,返回是类的话,就会变成json
所以第一可以在前端处理
第一个是把字符串转为对象
第二个是把对象转为字符串
现在我们来后端处理
因为这是我们后端的问题
我们在controller这里设置一下就可以了