最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 框架會遍歷已注冊的異常處理器,調(diào)用它們的 resolveException 方法。每個異常處理器有機會檢查異常類型,如果匹配,就執(zhí)行自定義的異常處理邏輯。

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

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

相關文章

  • 獲取Java的MyBatis框架項目中的SqlSession的方法

    獲取Java的MyBatis框架項目中的SqlSession的方法

    SqlSession中包括已經(jīng)映射好的SQL語句,這樣對象實例就可以直接拿過來用了,那么這里就來講解獲取Java的MyBatis框架項目中的SqlSession的方法
    2016-06-06
  • 一次詭異的full gc查找問題全過程

    一次詭異的full gc查找問題全過程

    這篇文章主要給大家分享介紹了一次詭異的full gc查找問題全部過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧啊
    2018-11-11
  • Java實現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例

    Java實現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例

    這篇文章主要介紹了Java實現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例,值得一提的是所謂的雙向冒泡排序并不比普通的冒泡排序效率來得高,注意相應的時間復雜度,需要的朋友可以參考下
    2016-04-04
  • Java實現(xiàn)Word轉(zhuǎn)PDF的兩種常見方案和性能實測

    Java實現(xiàn)Word轉(zhuǎn)PDF的兩種常見方案和性能實測

    這篇文章對比了Java后端開發(fā)中Word轉(zhuǎn)PDF的兩種常見方案,即docx4j(純Java實現(xiàn))和LibreOffice(調(diào)用Office原生引擎),下面小編就和大家詳細介紹一下具體實現(xiàn)方法吧
    2026-01-01
  • Java?SM2加密相關實現(xiàn)與簡單原理詳解

    Java?SM2加密相關實現(xiàn)與簡單原理詳解

    SM2算法可以用較少的計算能力提供比RSA算法更高的安全強度,而所需的密鑰長度卻遠比RSA算法低,這篇文章主要給大家介紹了關于Java?SM2加密相關實現(xiàn)與簡單原理的相關資料,需要的朋友可以參考下
    2024-01-01
  • SpringBoot接口返回日期格式化的3種方法實現(xiàn)與對比

    SpringBoot接口返回日期格式化的3種方法實現(xiàn)與對比

    這篇文章主要為大家詳細介紹了SpringBoot中接口返回日期格式化的3種方法實現(xiàn)與對比,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-09-09
  • idea文件上有鎖文件只讀不可編輯的解決

    idea文件上有鎖文件只讀不可編輯的解決

    這篇文章主要介紹了idea文件上有鎖文件只讀不可編輯的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • spring中的注入list集合

    spring中的注入list集合

    這篇文章主要介紹了spring中的注入list集合問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java 中HashCode重復的可能性

    java 中HashCode重復的可能性

    這篇文章主要介紹了java 中HashCode重復的可能性的相關資料,這里提供實例及測試代碼,需要的朋友可以參考下
    2017-07-07
  • Java中的Semaphore(信號量)全面解析

    Java中的Semaphore(信號量)全面解析

    信號量(Semaphore)是Java多線程兵法中的一種JDK內(nèi)置同步器,通過它可以實現(xiàn)多線程對公共資源的并發(fā)訪問控制,這篇文章主要介紹了Java中Semaphore(信號量)的相關資料,需要的朋友可以參考下
    2025-08-08

最新評論

绩溪县| 涞水县| 岳西县| 梓潼县| 溧阳市| 旅游| 宁德市| 隆回县| 镇赉县| 赤峰市| 定边县| 淄博市| 锦州市| 苏尼特左旗| 当阳市| 新郑市| 高阳县| 梁河县| 扶余县| 岳普湖县| 秦皇岛市| 浦县| 湖州市| 雷州市| 蒙阴县| 会宁县| 沂南县| 岳阳县| 丰城市| 浦江县| 溧阳市| 星子县| 化德县| 沁源县| 广河县| 房产| 西乡县| 南川市| 佛教| 达日县| 德保县|