Spring?MVC項(xiàng)目中的異常處理詳解
前言
我們?cè)陧?xiàng)目的開發(fā)中,難免會(huì)遇到各種可預(yù)知的、不可預(yù)知的異常需要處理。每個(gè)過(guò)程都單獨(dú)處理異常,系統(tǒng)的代碼耦合度高,工作量大且不好統(tǒng)一,維護(hù)的工作量也很大。
那么,能不能將所有類型的異常處理從各處理過(guò)程解耦出來(lái),這樣既保證了相關(guān)處理過(guò)程的 功能較單一,也實(shí)現(xiàn)了異常信息的統(tǒng)一處理和維護(hù)?答案是肯定的。下面將介紹Spring MVC是如何處理異常的。
1. 基于配置的簡(jiǎn)單異常處理
在SpringMVC中擁有一套非常強(qiáng)大的異常處理機(jī)制,SpringMVC通過(guò) HandlerExceptionResolver處理程序的異常,包括請(qǐng)求映射,數(shù)據(jù)綁定以及目標(biāo)方法的執(zhí)行時(shí)發(fā)生的異常。
SpringMVC提供了一個(gè)處理控制器方法執(zhí)行過(guò)程中所出現(xiàn)的異常的接口:
HandlerExceptionResolver,該接口的實(shí)現(xiàn)類有:DefaultHandlerExceptionResolver和
SimpleMappingExceptionResolver,下面就來(lái)看看如何使用簡(jiǎn)單異常處理器來(lái)處理異常。
使用 Spring MVC 提供的簡(jiǎn)單異常處理器 SimpleMappingExceptionResolver
Spring MVC配置文件
<!--配置異常處理器--> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!--ArithmeticException算術(shù)運(yùn)算異常:是出現(xiàn)異常的運(yùn)算條件時(shí),拋出此異常--> <prop key="java.lang.ArithmeticException">error</prop> </props> </property> <property name="exceptionAttribute" value="e"/> </bean>
注意:
properties的鍵表示處理器方法執(zhí)行過(guò)程中出現(xiàn)的異常
properties的值表示若出現(xiàn)指定異常時(shí),設(shè)置一個(gè)新的視圖名稱,跳轉(zhuǎn)到指定頁(yè)面
exceptionAttribute屬性設(shè)置一個(gè)屬性名,將出現(xiàn)的異常信息在請(qǐng)求域中進(jìn)行共享
控制器方法
@RequestMapping("/testException") public String testException(){ System.out.println(1/0); return "success"; }
在該控制器方法中拋出一個(gè)算術(shù)運(yùn)算異常,運(yùn)行
2. 基于注解的全局異常處理
@ControllerAdvice:將當(dāng)前類標(biāo)識(shí)為異常處理的組件,是Spring提供的新注解,它是對(duì)Controller的增強(qiáng),可對(duì) controller中被 @RequestMapping注解的方法加一些邏輯處理;
@ExceptionHandler:用于設(shè)置所標(biāo)識(shí)的方法處理的異常,@ExceptionHandler加在ControllerAdvice中,處理全局異常
ExceptionController
@ControllerAdvice public class ExceptionController { @ExceptionHandler(value = {ArithmeticException.class,NullPointerException.class}) public String exception(Exception e, Model model){ model.addAttribute("e",e); return "error"; } }
@ExceptionHandler的value值可以是數(shù)組,所以可以添加許多可能出現(xiàn)的異常;在該方法中
當(dāng)出現(xiàn)算數(shù)運(yùn)算異常或空指針異常就會(huì)跳轉(zhuǎn)到我們自己設(shè)置的異常頁(yè)面,并且展示異常信息。
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>錯(cuò)誤頁(yè)面</title> </head> <body> <h1>error</h1> ${e} </body> </html>
異常頁(yè)面
總結(jié)
到此這篇關(guān)于Spring MVC項(xiàng)目中異常處理的文章就介紹到這了,更多相關(guān)SpringMVC異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
intellij idea設(shè)置統(tǒng)一JavaDoc模板的方法詳解
這篇文章主要介紹了intellij idea設(shè)置統(tǒng)一JavaDoc模板的方法詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Lambda表達(dá)式下訪問(wèn)外部變量問(wèn)題
這篇文章主要介紹了Lambda表達(dá)式下訪問(wèn)外部變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Java ArrayList 數(shù)組之間相互轉(zhuǎn)換
本文通過(guò)代碼示例給大家講解arraylist轉(zhuǎn)化為數(shù)組,然后數(shù)組轉(zhuǎn)化為arraylist的相關(guān)資料,感興趣的朋友一起看看吧2015-11-11Java開發(fā)框架spring實(shí)現(xiàn)自定義緩存標(biāo)簽
這篇文章主要介紹了Java開發(fā)框架spring實(shí)現(xiàn)自定義緩存標(biāo)簽的詳細(xì)代碼,感興趣的小伙伴們可以參考一下2015-12-12springboot 2.x整合mybatis實(shí)現(xiàn)增刪查和批量處理方式
這篇文章主要介紹了springboot 2.x整合mybatis實(shí)現(xiàn)增刪查和批量處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot?項(xiàng)目的創(chuàng)建與啟動(dòng)步驟詳解
這篇文章主要介紹了SpringBoot?項(xiàng)目的創(chuàng)建與啟動(dòng),本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03實(shí)例解析Java的Jackson庫(kù)中的數(shù)據(jù)綁定
這篇文章主要介紹了Java的Jackson庫(kù)中的數(shù)據(jù)綁定,這里分為通常的簡(jiǎn)單數(shù)據(jù)綁定與全數(shù)據(jù)綁定兩種情況來(lái)講,需要的朋友可以參考下2016-01-01Spring Boot 2和Redis例子實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Spring Boot2發(fā)布與調(diào)用REST服務(wù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11通過(guò)實(shí)例解析傳統(tǒng)jar包引用方式
這篇文章主要介紹了通過(guò)實(shí)例解析傳統(tǒng)jar包引用方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07