一考传、異常處理
springMVC實(shí)現(xiàn)異常處理瘩蚪,必須實(shí)現(xiàn)HandlerExceptionResolver接口湖苞。
該接口的實(shí)現(xiàn)類都是異常的各種處理方式:
(一)筋遭、@ExceptionHandler異常處理
1、異常處理方法
ExceptionHandlerExceptionResolver類:主要提供了的@ExceptionHandler注解籽懦,并通過該注解處理異常于个。
如果使用了@ExceptionHandler注解的方法類,該類中其他方法中拋出@ExceptionHandler注解的方法所捕獲的異常暮顺,就轉(zhuǎn)到@ExceptionHandler注解的方法去處理(相當(dāng)于catch)厅篓。
@ExceptionHandler注解的方法捕獲是最短優(yōu)先(最接近拋出的異常)秀存。例:有兩個(gè)捕獲異常的方法:第一個(gè)是針對(duì)ArithmeticException.class捕獲,第二個(gè)是針對(duì)Exception.class的捕獲贷笛。當(dāng)拋出ArithmeticException異常的時(shí)候应又,就直接進(jìn)入第一個(gè)方法(對(duì)ArithmeticException.class捕獲的方法)。
例:
請(qǐng)求頁面(index.jsp):
Controller處理請(qǐng)求(這里新建一個(gè)類乏苦,類里面發(fā)生異常后株扛,轉(zhuǎn)到@ExceptionHandler注解的方法):
注意:這里@ExceptionHandler注解的方法的方法參數(shù)必須是異常類型(Trowable或其子類),不能包含其他類型的參數(shù)汇荐。
異常展示頁面:
例:針對(duì)@ExceptionHandler注解的方法捕獲是最短優(yōu)先(最接近拋出的異常)的案例洞就。
這里上面例子的基礎(chǔ)上,建立第二個(gè)例子掀淘。
Controller處理請(qǐng)求類:(最短優(yōu)先)
2旬蟋、異常處理類
通過@ControllerAdvice注解來注解異常處理類。
該@ControllerAdvice注解中的異常處理方法可以處理同一個(gè)包下任何類中的拋出異常革娄。
如果類內(nèi)部和包中都捕獲了相同的異常倾贰,最短路徑優(yōu)先(執(zhí)行類內(nèi)部的捕獲異常的方法)。
例:
請(qǐng)求頁面(index.jsp):
Controller處理請(qǐng)求(方法中故意拋出異常):
異常處理類:
(二)拦惋、@ResponseStatue異常處理
ResponseStatusExceptionResolver類:自定義異常顯示頁面匆浙。主要提供了的@ResponseStatue注解。
@ResponseStatue注解:既可以用在類的前面厕妖,也可以用在方法(發(fā)生異常跳轉(zhuǎn)到@ResponseStatue注解方法)的前面首尼。
例:跳轉(zhuǎn)到異常處理類
請(qǐng)求頁面(index.jsp):
Controller處理請(qǐng)求:
自定義的異常類:
例:跳轉(zhuǎn)到異常處理方法
請(qǐng)求頁面(index.jsp):
Controller處理請(qǐng)求(這里面既有處理請(qǐng)求,又有處理異常):
(三)言秸、其他異常
1软能、DefaultHandlerExceptionResolver類
springMVC中特殊處理的一些異常。具體異常見底層代碼(avaDoc中)举畸。j例:405異常查排。
@see org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler
@see #handleNoSuchRequestHandlingMethod
@see #handleHttpRequestMethodNotSupported:如果springMVC的處理方法限制為POST方式,則實(shí)際請(qǐng)求的方式為GET抄沮,則會(huì)出發(fā)該異常頁面跋核,這個(gè)異常是springMVC自己默認(rèn)的。
@see #handleHttpMediaTypeNotSupported
@see #handleMissingServletRequestParameter
@see #handleServletRequestBindingException
@see #handleTypeMismatch
@see #handleHttpMessageNotReadable
@see #handleHttpMessageNotWritable
@see #handleMethodArgumentNotValidException
@see #handleMissingServletRequestParameter
@see #handleMissingServletRequestPartException
?@see #handleBindException
2合是、SimpleMappingExceptionResolver類
通過配置來實(shí)現(xiàn)異常的處理了罪。配置信息:
例:
請(qǐng)求頁面(index.jsp):
Controller處理請(qǐng)求并拋出異常:
springmvc.xml配置: