欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot對Filter過濾器中的異常進行全局處理方案詳解

 更新時間:2023年09月27日 11:11:45   作者:lans_g  
這篇文章主要介紹了SpringBoot對Filter過濾器中的異常進行全局處理,在SpringBoot中我們通過 @ControllerAdvice 注解和 @ExceptionHandler注解注冊了全局異常處理器,需要的朋友可以參考下

前言

今天處理攔截器中的異常時,遇到這樣一個問題,我們希望在過濾器中對用戶的請求進行判斷,如果不符合要求直接拋出異常并在前端展示。但是如果我們直接在過濾器中throw一個異常時,盡管我們使用@ControllerAdvice和 @ExceptionHandler注解注冊了全局異常處理器,但是前端是無法接收到的。

這是因為過濾器是在進入Servlet之前處理請求的,從注解名稱也能看出來@ControllerAdvice是處理Controller層異常的,請求還沒到Controller層,當然無法處理了。

那么如何將過濾器中的異常像Controller層一樣進行全局處理呢?

一、全局異常處理

首先全局異常處理器還是不可少的,大概像下面這個樣子

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = ServiceException.class)
    @ResponseBody
    public ResponseEntity<AjaxResponse> serviceExceptionHandler(ServiceException e, HttpServletRequest request){
        //...處理一些邏輯
        return new ResponseEntity<>(new AjaxResponse().failure(Constants.ErrorCode.SERVICE_ERROR,e.getMessage()), HttpStatus.BAD_REQUEST);
    }
}

二、處理過濾器中的異常

在我們自定義的Filter類中,使用HandlerExceptionResolver的resolveException方法來進行處理,如下面代碼所示

@Component
public class MyFilter implements Filter {
    @Override
    public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //...進行一些邏輯處理
        	if (...) {
                HandlerExceptionResolver handlerExceptionResolver = SpringContextUtil.getBean("handlerExceptionResolver");
                handlerExceptionResolver.resolveException((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse,
                        null,new ServiceException("拋出過濾器全局異常!"));
                return;
            }
        filterChain.doFilter(servletRequest, servletResponse);
    }
    @Override
    public void destroy() {
    }
}

這樣就能實現(xiàn)效果了:

看一下后端返回的響應數(shù)據(jù)如下:

接著我們說說HandlerExceptionResolver和它的resolveException方法的原理實現(xiàn)。

HandlerExceptionResolver 接口是 Spring MVC 提供的全局異常處理機制的一部分,它的原理基于 Spring MVC 框架的請求處理流程和異常處理機制。

當請求在 Spring MVC 中的某一組件中拋出異常時,異常會沿著請求處理的鏈路向上傳播,直到找到能夠處理異常的地方。通常,異常首先會被容器(例如,Servlet 容器)捕獲,然后傳遞給 Spring MVC 框架。Spring MVC 框架會遍歷已注冊的異常處理器,調用它們的 resolveException 方法。每個異常處理器有機會檢查異常類型,如果匹配,就執(zhí)行自定義的異常處理邏輯。

在SpringBoot中我們通過 @ControllerAdvice 注解和 @ExceptionHandler注解注冊了全局異常處理器,因此resolveException方法會將異常進行傳播給我們自定義的異常處理器,最后就能進行全局異常處理了。

到此這篇關于SpringBoot對Filter過濾器中的異常進行全局處理的文章就介紹到這了,更多相關SpringBoot異常全局處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot之自定義banner使用代碼實例

    SpringBoot之自定義banner使用代碼實例

    這篇文章主要介紹了SpringBoot之自定義banner使用代碼實例,在Spring Boot中,你可以通過定制Banner來個性化你的應用程序啟動時的輸出,Banner是一個在應用程序啟動時顯示的ASCII藝術字形式的標志,用于增加應用程序的識別度和個性化,需要的朋友可以參考下
    2024-01-01
  • springboot解決Class path contains multiple SLF4J bindings問題

    springboot解決Class path contains multiple 

    這篇文章主要介紹了springboot解決Class path contains multiple SLF4J bindings問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot項目中連接SQL Server的三種方式

    SpringBoot項目中連接SQL Server的三種方式

    連接SQL Server是許多Spring Boot項目中常見的需求之一,本文主要介紹了SpringBoot項目中連接SQL Server的三種方式,具有一定的參考價值 ,感興趣的可以了解一下
    2023-09-09
  • java實現(xiàn)周期性執(zhí)行(定時任務)

    java實現(xiàn)周期性執(zhí)行(定時任務)

    這篇文章主要為大家詳細介紹了java實現(xiàn)周期性執(zhí)行定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • SpringBoot實現(xiàn)子類的反序列化示例代碼

    SpringBoot實現(xiàn)子類的反序列化示例代碼

    這篇文章主要給大家介紹了關于SpringBoot實現(xiàn)子類的反序列化的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • MybatisPlus 主鍵策略的幾種實現(xiàn)方法

    MybatisPlus 主鍵策略的幾種實現(xiàn)方法

    MybatisPlus-Plus支持多種主鍵生成策略,可以通過@TableId注解的type屬性配置,主要策略包括AUTO、INPUT、ASSING_ID、ASSING_UUID和NONE,每種策略適用于不同的場景,下面就來介紹一下
    2024-10-10
  • Spring Cloud微服務使用webSocket的方法

    Spring Cloud微服務使用webSocket的方法

    WebSocket在現(xiàn)代瀏覽器中的應用已經算是比較普遍了,在某些業(yè)務場景下,要求必須能夠在服務器端推送消息至客戶端,本文給大家介紹Spring Cloud微服務使用webSocket的方法,感興趣的朋友一起看看吧
    2021-06-06
  • SpringBoot3整合Druid監(jiān)控功能的項目實踐

    SpringBoot3整合Druid監(jiān)控功能的項目實踐

    Druid連接池作為一款強大的數(shù)據(jù)庫連接池,提供了豐富的監(jiān)控和管理功能,成為很多Java項目的首選,本文主要介紹了SpringBoot3整合Druid監(jiān)控功能的項目實踐,感興趣的可以了解一下
    2024-01-01
  • java自定義JDBC實現(xiàn)連接池

    java自定義JDBC實現(xiàn)連接池

    本文主要介紹了java自定義JDBC實現(xiàn)連接池,包含實現(xiàn)JDBC連接池以及SQLException?異常的處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • MyBatis中#{}?和?${}?的區(qū)別和動態(tài)?SQL詳解

    MyBatis中#{}?和?${}?的區(qū)別和動態(tài)?SQL詳解

    這篇文章主要介紹了MyBatis中#{}和${}的區(qū)別,包括參數(shù)傳遞、安全性、性能等方面,然后詳細介紹了如何使用#{}和${}進行排序、模糊查詢、動態(tài)SQL、數(shù)據(jù)庫連接池等操作,最后,總結了注解方式的動態(tài)SQL,感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評論