SpringMVC基於配置的異常處理器

一、基於配置的異常處理

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異常處理器的資料請關註WalkonNet其它相關文章!

推薦閱讀: