這個(gè)是統(tǒng)一異常處理類, @ControllerAdvice這個(gè)注解聲明的表示統(tǒng)一異常處理,@ExceptionHandler(value = Exception.class)這個(gè)注解寫在方法上表示,該方法處理哪個(gè)異常.package com.buba.exceptionController; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; //捕捉工程所有異常 @ControllerAdvice public class GloableExceptionController { //攔截Exception類型異常 @ExceptionHandler(value = Exception.class) public ModelAndView defaultExceptionHandler(HttpServletRequest request,Exception ex){ ModelAndView modelAndView = new ModelAndView("defaultException"); //獲取請(qǐng)求路徑 modelAndView.addObject("url",request.getRequestURL()); //異常對(duì)象 modelAndView.addObject("ex",ex); //異常對(duì)象信息 modelAndView.addObject("message",ex.getMessage()); return modelAndView; } @ExceptionHandler(value = ArrayIndexOutOfBoundsException.class) public ModelAndView defaultExceptionHandler2(HttpServletRequest request,Exception ex){ ModelAndView modelAndView = new ModelAndView("defaultException2"); //獲取請(qǐng)求路徑 modelAndView.addObject("url",request.getRequestURL()); //異常對(duì)象 modelAndView.addObject("ex",ex); //異常對(duì)象信息 modelAndView.addObject("message",ex.getMessage()); return modelAndView; } } 這是兩個(gè)異常頁(yè)面,進(jìn)行測(cè)試
我controller寫了兩個(gè)異常方法,第一個(gè)是ArrayIndexOutOfBoundsException這個(gè)異常,第二個(gè)是NullPointerException
當(dāng)訪問(wèn)第二個(gè)異常的時(shí)候,因?yàn)樵诋惓L幚眍愔袥](méi)有精確指明有空指針異常,所以會(huì)找它的父類,exception,所以出來(lái)的是第一個(gè)異常頁(yè)面當(dāng)訪問(wèn)第一個(gè)異常的時(shí)候,因?yàn)樵诋惓L幚眍愔杏忻鞔_指定的這個(gè)異常,所以返回的是第二個(gè)頁(yè)面
總結(jié): 也就是說(shuō)這個(gè)異常處理類中,可以獲取所有的異常都拿excepion來(lái)接收,也可以明確指定哪個(gè)異常,跟上下順序無(wú)關(guān),有明確指定的異常會(huì)找明確指定的,沒(méi)有就找父類. |
|
來(lái)自: jackeyqing > 《學(xué)習(xí)整理360doc》