上一節(jié)小博老師給大家介紹了SpringMVC對(duì)異常處理的方法之一耘沼,使用默認(rèn)的SimpleMappingExceptionResolver實(shí)現(xiàn)類证鸥。我們知道SimpleMappingExceptionResolver類是接口HandlerExceptionResolver的實(shí)現(xiàn)類。所以,我們完全可以自定義一個(gè)異常解析類來(lái)處理異常信息。這一節(jié)我們就詳細(xì)了解一下HandlerExceptionResolver接口,以及如何自定義實(shí)現(xiàn)類模她。
先看一下HandlerExceptionResolver接口的源代碼:
接口定義很簡(jiǎn)單,就一個(gè)resolveException方法懂牧。該方法用來(lái)處理Controller中的異常侈净。Exception ex參數(shù)即Controller拋出的具體異常對(duì)象。返回值類型是ModelAndView僧凤,可以通過(guò)它設(shè)置異常時(shí)顯示的頁(yè)面用狱。
接下來(lái)我們實(shí)現(xiàn)一個(gè)自己定義的異常處理類:
這段代碼的意思是,如果是IOException類型的異常跳轉(zhuǎn)到ioErrorPage頁(yè)面拼弃,如果是ClassNotFoundException類型的異常跳轉(zhuǎn)到notFoundPage頁(yè)面夏伊。當(dāng)然,我們還可以做更多的處理吻氧。比如發(fā)送email,保存異常到文件等等。相對(duì)于SimpleMappingExceptionResolver可以更加靈活的進(jìn)行判斷和處理抹竹。
當(dāng)然美侦,還需要將自定義的BwfHandlerExceptionResolver實(shí)現(xiàn)類配置到Spring配置文件中。
注意:如果resolveException返回了ModelAndView,會(huì)優(yōu)先顯示返回值中的頁(yè)面。如果,resolveException返回null垄懂,并且在web.xml中配置了error-page的500狀態(tài)碼對(duì)應(yīng)的頁(yè)面,則會(huì)顯示該頁(yè)面痛垛。