美文网首页
一文搞懂拦截器、过滤器、全局异常捕获器、Controller、切

一文搞懂拦截器、过滤器、全局异常捕获器、Controller、切

作者: 小胖学编程 | 来源:发表于2024-05-27 14:37 被阅读0次

    背景:我们想对Spring的项目做一个全局拦截器,通过解析业务报文,获取到code码非成功的异常报文,同时对code码进行异常分级。搭建系统维度监控。

    但是项目中,有的地方使用的是Result对象返回错误,有的用Exception来抛出异常。有的地方是在Controller返回,有的是在拦截器中抛出异常,有的是在切面中抛出异常。

    所以需要搞清楚:拦截器、过滤器、全局异常捕获器、Controller、切面的执行顺序

    结论

    1. 正常的请求
    进入Filter
    拦截器:Interceptor--preHandle
    进入AOP切面
    执行Controller
    离开AOP切面
    拦截器:Interceptor--postHandle
    拦截器:Interceptor--afterCompletion
    离开Filter
    
    1. 当Controller出现异常被全局异常捕获器捕获时(没有执行拦截器的postHandle)
    进入Filter
    拦截器:Interceptor--preHandle
    进入AOP切面
    执行Controller
    离开AOP切面
    进入全局异常捕获器:ControllerAdvice
    拦截器:Interceptor--afterCompletion
    离开Filter
    
    1. 当拦截器抛出异常,被全集异常捕获器捕获时
    进入Filter
    拦截器:Interceptor--preHandle
    进入全局异常捕获器:ControllerAdvice
    离开Filter
    

    可以看到:

    1. Filter中是肯定能拿到响应报文的。但是需要对流进行处理,将其转化成可重复读的流;
    2. 切面可以处理正常的请求、全局异常捕获器可以处理Exception的请求,也可以完成闭环的监控解析。

    相关文章

      网友评论

          本文标题:一文搞懂拦截器、过滤器、全局异常捕获器、Controller、切

          本文链接:https://www.haomeiwen.com/subject/grgcqjtx.html