面经-业务
拦截器
流程图

实现HandlerInterceptor
位置
interceptor目录下
具体流程
当我们打开浏览器来访问部署在web服务器当中的web应用时,此时我们所定义的过滤器会拦截到这次请求。拦截到这次请求之后,它会先执行放行前的逻辑,然后再执行放行操作。而由于我们当前是基于springboot开发的,所以放行之后是进入到了spring的环境当中,也就是要来访问我们所定义的controller当中的接口方法。
Tomcat并不识别所编写的Controller程序,但是它识别Servlet程序,所以在Spring的Web环境中提供了一个非常核心的Servlet:DispatcherServlet(前端控制器),所有请求都会先进行到DispatcherServlet,再将请求转给Controller。
当我们定义了拦截器后,拦截器会在执行Controller的方法之前拦截住请求,执行
preHandle()
方法,这个方法执行完成后需要返回一个布尔类型的值,如果返回true,就表示放行本次操作,才会继续访问controller中的方法;如果返回false,则不会放行(controller中的方法也不会执行)。在controller当中的方法执行完毕之后,再回过来执行
postHandle()
这个方法以及afterCompletion()
方法,然后再返回给DispatcherServlet,最终再来执行过滤器当中放行后的这一部分逻辑的逻辑。执行完毕之后,最终给浏览器响应数据。
简略流程
- preHandle : 调用controller之前
- postHandle:调用controller之后
- afterCompletion:视图渲染之后(这里的视图渲染指的是服务器将动态资源转化为静态资源)
核心代码
1 |
|
配置拦截器
位置
config目录下
简略流程
- 实现 WebMvcConfigurer
- 重写 addInterceptors
核心代码
1 | // 拦截器关键代码 |
统一异常处理
核心注解
- @ControllerAdvice :异常控制器,推荐使用@RestControllerAdvice(整体代码更简洁)
- @ExceptionHandler: 声明异常类型
核心代码
1 | // @ControllerAdvice |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 慕易的书屋!
评论