springmvc學習筆記(29)——@ExceptionHandle 註解
阿新 • • 發佈:2018-12-15
HandleException的優先順序
當一個controller中有多個HandleException註解出現時,那麼異常被哪個方法捕捉呢?這就存在一個優先順序的問題
@ExceptionHandler({ArithmeticException.class}) public String testArithmeticException(Exception e){ System.out.println("ArithmeticException:"+e); return "error"; } @ExceptionHandler({RuntimeException.class}) public String testRuntimeException(Exception e){ System.out.println("RuntimeException"+e); return "error"; } @RequestMapping("testExceptionHandle") public String testExceptionHandle(@RequestParam("i")Integer i){ System.out.println(10/i); return "hello"; }
如以上程式碼所示,目標方法是testExceptionHandle,另外兩個方法被ExceptionHandler註解修飾。
因此我們可以確定,ExceptionHandler的優先順序是:在異常的體系結構中,哪個異常與目標方法丟擲的異常血緣關係越緊密,就會被哪個捕捉到。
捕捉全域性的異常
ExceptionHandler只能捕捉同一個controller中的異常,其實我們也有辦法捕捉整個程式中所有的異常
新建一個類,加上@ControllerAdvice註解
package com.zj.controller; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; //處理異常 @ControllerAdvice public class HandleForException { @ExceptionHandler({ArithmeticException.class}) public String testArithmeticException(Exception e){ System.out.println("ArithmeticException:"+e); return "error"; } }