首頁 > 軟體

SpringMVC基於設定的例外處理器

2022-05-28 18:01:53

一、基於設定的例外處理

SpringMVC 提供了一個處理控制器方法執行過程中所出現的異常的介面:HandlerExceptionResolver。

HandlerExceptionResolver介面的實現類有:

DefaultHandlerExceptionResolver,這個是預設使用的處理器,之前遇到的一些異常,其實springMVC 都已經給我們處理過了。

SimpleMappingExceptionResolver,這個可以讓我們自定義例外處理。當出現指定的異常,可以設定返回新的檢視。

使用SimpleMappingExceptionResolver,在springMVC的組態檔中:

<!--設定例外處理-->
  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      <property name="exceptionMappings">
          <props>
              <prop key="java.lang.ArithmeticException">error</prop>
          </props>
      </property>
  </bean>

範例裡使用的一個處理運算異常的類ArithmeticException,裡面的值 error 表示異常後跳轉的檢視。

對應的,新建一個error.html頁:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>error</title>
</head>
<body>
出現錯誤
</body>
</html>

接下來,造一個異常:

@RequestMapping("/testExceptionHandler")
  public String testExceptionHandler() {
      System.out.println(1/0);
      return "success";
  }

正常情況下這個處理器會跳轉到 success 頁,但是裡面有個 1/0的異常,所以會按照設定跳轉到 error 頁。

重新部署,測試一下,存取http://localhost:8080/springmvc/testExceptionHandler:

成功跳轉到 error 頁。

儲存異常資訊

此外,還可以繼續屬性exceptionAttribute,設定一個key用來存放異常資訊,預設存在當前的請求域中:

<!--設定例外處理-->
  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      <property name="exceptionMappings">
          <props>
              <prop key="java.lang.ArithmeticException">error</prop>
          </props>
      </property>
      <!--exceptionAttribute屬性設定一個屬性名,將出現的異常資訊在請求域中進行共用-->
      <property name="exceptionAttribute" value="ex"></property>
  </bean>

那麼在 error 頁中就可以使用到ex來獲取異常資訊了。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>error</title>
</head>
<body>
出現錯誤
<p th:text="${ex}"></p>
</body>
</html>

重新部署,重新整理下頁面:

二、基於註解的例外處理

springmvc 同樣也提供了一套註解,通過註解方式也可以實現上述的例外處理。

新建一個控制器 ExceptionController:

//@ControllerAdvice將當前類標識為例外處理的元件
@ControllerAdvice
public class ExceptionController {
    //@ExceptionHandler 用於設定所標識方法處理的異常
    @ExceptionHandler(value = {ArithmeticException.class, NullPointerException.class})
    public String testException(Exception ex, Model model){
        // ex表示當前請求處理中出現的異常物件,放到請求域中
        model.addAttribute("ex", ex);
        return "error";
    }
}

@ControllerAdvice將當前類標識為例外處理的元件。

ex表示當前請求處理中出現的異常物件,用Model放到請求域中。

現在註釋掉組態檔裡的處理器,重新部署下,重新整理http://localhost:8080/springmvc/testExceptionHandler:

依然可以。

以上就是SpringMVC基於設定的例外處理器的詳細內容,更多關於SpringMVC例外處理器的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com