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其它相關文章!
推薦閱讀:
- springMvc全局異常的實現
- Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解
- SpringMVC全局異常處理的三種方式
- SpringMVC實現文件上傳與下載、攔截器、異常處理器等功能
- 基於SSM 集成 Freemarker模板引擎的方法