簡體   English   中英

如果端點路徑未知,ExceptionHandler 不會捕獲 HandlerInterceptor 異常

[英]ExceptionHandler doesn't catch HandlerInterceptor exception if endpoint path is unknown

我有一個實現 HandlerInterceptor 接口並實現 preHandle 方法的組件。 在此方法中,我從請求中檢索一個參數,如果缺少該參數,則拋出 IllegalArgumentException。

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String parameter = request.getHeader("parameter123");
        if (StringUtils.isEmpty(parameter)) {
            throw new IllegalArgumentException("parameter123 not specified");
        }
        [...]
        return true;
    }

在另一個用@ControllerAdvice 注釋的 class 中,我有一個 ExceptionHandler,它捕獲 IllegalArgumentExceptions 並將其轉換為狀態代碼為 HTTP 的格式化響應 400。

當通過觸發我的 API 的有效路徑執行此操作時,一切正常。 當我嘗試調用 API 的無效/不存在路徑時出現問題。調用 HandlerInterceptor 並拋出異常但未觸發我的 ExceptionHandler,結果是基本的 HTTP 狀態代碼 500 異常。 它似乎既覆蓋了基本的 HTTP 狀態 404 機制,同時也阻止了我的 ExceptionHandlers 的觸發(即使是 Exception.class 上的 ExceptionHandler 也不會被調用)。

歡迎對此行為進行任何解釋! 謝謝

雖然這可能是一個老問題,但我想為將來可能遇到它的任何人提供一個答案。

當您在 HandlerInterceptor 的 preHandle 方法中引發異常時,它可能被包裝在另一個稱為 NestedServletException 的異常中。 這是 Spring 框架拋出的特定異常。

值得注意的是,NestedServletException 是在 servlet 或過濾器拋出異常時發生的運行時異常。 它包含原始異常並提供有關異常發生位置的附加信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM