SpringMVC基于配置的異常處理器
一、基于配置的異常處理
SpringMVC 提供了一個(gè)處理控制器方法執(zhí)行過程中所出現(xiàn)的異常的接口:HandlerExceptionResolver。
HandlerExceptionResolver接口的實(shí)現(xiàn)類有:
DefaultHandlerExceptionResolver,這個(gè)是默認(rèn)使用的處理器,之前遇到的一些異常,其實(shí)springMVC 都已經(jīng)給我們處理過了。
SimpleMappingExceptionResolver,這個(gè)可以讓我們自定義異常處理。當(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>
示例里使用的一個(gè)處理運(yùn)算異常的類ArithmeticException,里面的值 error 表示異常后跳轉(zhuǎn)的視圖。
對(duì)應(yīng)的,新建一個(gè)error.html頁(yè):
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>error</title> </head> <body> 出現(xiàn)錯(cuò)誤 </body> </html>
接下來,造一個(gè)異常:
@RequestMapping("/testExceptionHandler") public String testExceptionHandler() { System.out.println(1/0); return "success"; }
正常情況下這個(gè)處理器會(huì)跳轉(zhuǎn)到 success 頁(yè),但是里面有個(gè) 1/0的異常,所以會(huì)按照配置跳轉(zhuǎn)到 error 頁(yè)。
重新部署,測(cè)試一下,訪問http://localhost:8080/springmvc/testExceptionHandler:
成功跳轉(zhuǎn)到 error 頁(yè)。
儲(chǔ)存異常信息
此外,還可以繼續(xù)屬性exceptionAttribute,設(shè)置一個(gè)key用來存放異常信息,默認(rèn)存在當(dāng)前的請(qǐng)求域中:
<!--配置異常處理--> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.ArithmeticException">error</prop> </props> </property> <!--exceptionAttribute屬性設(shè)置一個(gè)屬性名,將出現(xiàn)的異常信息在請(qǐng)求域中進(jìn)行共享--> <property name="exceptionAttribute" value="ex"></property> </bean>
那么在 error 頁(yè)中就可以使用到ex來獲取異常信息了。
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>error</title> </head> <body> 出現(xiàn)錯(cuò)誤 <p th:text="${ex}"></p> </body> </html>
重新部署,刷新下頁(yè)面:
二、基于注解的異常處理
springmvc 同樣也提供了一套注解,通過注解方式也可以實(shí)現(xiàn)上述的異常處理。
新建一個(gè)控制器 ExceptionController:
//@ControllerAdvice將當(dāng)前類標(biāo)識(shí)為異常處理的組件 @ControllerAdvice public class ExceptionController { //@ExceptionHandler 用于設(shè)置所標(biāo)識(shí)方法處理的異常 @ExceptionHandler(value = {ArithmeticException.class, NullPointerException.class}) public String testException(Exception ex, Model model){ // ex表示當(dāng)前請(qǐng)求處理中出現(xiàn)的異常對(duì)象,放到請(qǐng)求域中 model.addAttribute("ex", ex); return "error"; } }
@ControllerAdvice將當(dāng)前類標(biāo)識(shí)為異常處理的組件。
ex表示當(dāng)前請(qǐng)求處理中出現(xiàn)的異常對(duì)象,用Model放到請(qǐng)求域中。
現(xiàn)在注釋掉配置文件里的處理器,重新部署下,刷新http://localhost:8080/springmvc/testExceptionHandler:
依然可以。
以上就是SpringMVC基于配置的異常處理器的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC異常處理器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決java文件流處理異常 mark/reset not supported問題
這篇文章主要介紹了解決java文件流處理異常 mark/reset not supported問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10SpringBoot利用EasyExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)
EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能看,本文就將介紹如何利用EasyExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù),需要的朋友可以參考下2023-07-07java多線程實(shí)現(xiàn)服務(wù)器端與多客戶端之間的通信
本篇文章主要介紹了java多線程實(shí)現(xiàn)服務(wù)器端與多客戶端之間的通信,介紹了多線程來實(shí)現(xiàn)服務(wù)器與多線程之間的通信的基本步驟,有需要的小伙伴可以參考下。2016-10-10SpringBoot如何實(shí)現(xiàn)接口版本控制
這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)接口版本控制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10springboot讀取resource配置文件生成容器對(duì)象的示例代碼
這篇文章主要介紹了springboot讀取resource配置文件生成容器對(duì)象的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07