SpringMVC基于配置的異常處理器
一、基于配置的異常處理
SpringMVC 提供了一個處理控制器方法執(zhí)行過程中所出現(xiàn)的異常的接口:HandlerExceptionResolver。
HandlerExceptionResolver接口的實(shí)現(xiàn)類有:
DefaultHandlerExceptionResolver,這個是默認(rèn)使用的處理器,之前遇到的一些異常,其實(shí)springMVC 都已經(jīng)給我們處理過了。
SimpleMappingExceptionResolver,這個可以讓我們自定義異常處理。當(dāng)出現(xiàn)指定的異常,可以設(shè)置返回新的視圖。
使用SimpleMappingExceptionResolver,在springMVC的配置文件中:
<!--配置異常處理-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
</bean>示例里使用的一個處理運(yùn)算異常的類ArithmeticException,里面的值 error 表示異常后跳轉(zhuǎn)的視圖。
對應(yīng)的,新建一個error.html頁:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
出現(xiàn)錯誤
</body>
</html>接下來,造一個異常:
@RequestMapping("/testExceptionHandler")
public String testExceptionHandler() {
System.out.println(1/0);
return "success";
}正常情況下這個處理器會跳轉(zhuǎn)到 success 頁,但是里面有個 1/0的異常,所以會按照配置跳轉(zhuǎn)到 error 頁。
重新部署,測試一下,訪問http://localhost:8080/springmvc/testExceptionHandler:

成功跳轉(zhuǎn)到 error 頁。
儲存異常信息
此外,還可以繼續(xù)屬性exceptionAttribute,設(shè)置一個key用來存放異常信息,默認(rèn)存在當(dāng)前的請求域中:
<!--配置異常處理-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
<!--exceptionAttribute屬性設(shè)置一個屬性名,將出現(xiàn)的異常信息在請求域中進(jìn)行共享-->
<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>
出現(xiàn)錯誤
<p th:text="${ex}"></p>
</body>
</html>重新部署,刷新下頁面:

二、基于注解的異常處理
springmvc 同樣也提供了一套注解,通過注解方式也可以實(shí)現(xiàn)上述的異常處理。
新建一個控制器 ExceptionController:
//@ControllerAdvice將當(dāng)前類標(biāo)識為異常處理的組件
@ControllerAdvice
public class ExceptionController {
//@ExceptionHandler 用于設(shè)置所標(biāo)識方法處理的異常
@ExceptionHandler(value = {ArithmeticException.class, NullPointerException.class})
public String testException(Exception ex, Model model){
// ex表示當(dāng)前請求處理中出現(xiàn)的異常對象,放到請求域中
model.addAttribute("ex", ex);
return "error";
}
}@ControllerAdvice將當(dāng)前類標(biāo)識為異常處理的組件。
ex表示當(dāng)前請求處理中出現(xiàn)的異常對象,用Model放到請求域中。
現(xiàn)在注釋掉配置文件里的處理器,重新部署下,刷新http://localhost:8080/springmvc/testExceptionHandler:

依然可以。
以上就是SpringMVC基于配置的異常處理器的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC異常處理器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決java文件流處理異常 mark/reset not supported問題
這篇文章主要介紹了解決java文件流處理異常 mark/reset not supported問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
SpringBoot利用EasyExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)
EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能看,本文就將介紹如何利用EasyExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù),需要的朋友可以參考下2023-07-07
java多線程實(shí)現(xiàn)服務(wù)器端與多客戶端之間的通信
本篇文章主要介紹了java多線程實(shí)現(xiàn)服務(wù)器端與多客戶端之間的通信,介紹了多線程來實(shí)現(xiàn)服務(wù)器與多線程之間的通信的基本步驟,有需要的小伙伴可以參考下。2016-10-10
SpringBoot如何實(shí)現(xiàn)接口版本控制
這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)接口版本控制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
springboot讀取resource配置文件生成容器對象的示例代碼
這篇文章主要介紹了springboot讀取resource配置文件生成容器對象的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07

