1. 程式人生 > >springmvc學習筆記(29)——HandleException處理異常

springmvc學習筆記(29)——HandleException處理異常

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                       

如何使用HandleException

在程式中,異常是最常見的,我們需要捕捉異常並處理它,才能保證程式不被終止。

最常見的異常處理方法就是用try   catch來捕捉異常。這次我們使用springmvc給我們提供的方法來處理異常

先模擬一個異常出現的場景。以下是一個簡單的數學異常

    @RequestMapping("testExceptionHandle")    public String testExceptionHandle(@RequestParam("i")Integer i){        System.out.println(10
/i);        return "hello";    }
  • 1
  • 2
  • 3
  • 4
  • 5

當i的值為0的時候,就會丟擲數學異常。該如何捕捉呢,我們使用ExceptionHandler註解

    //注意,該註解不是加在產生異常的方法上,而是另外寫一個方法    @ExceptionHandler({ArithmeticException.class})    public
String testArithmeticException(Exception e){        System.out.println("ArithmeticException:"+e);        return "error";    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
 
     
  • ExceptionHandler 的value屬性是一個Class 陣列,因此我們可以在該註解的屬性中加入多個異常類
  •  
  • 當目標方法產生異常時,將被這個方法捕捉,我們可以得到異常的例項
  •  
  • 注意,捕捉異常的方法要和目標方法在同一個controller中
  •  

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";    }
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
 

如以上程式碼所示,目標方法是testExceptionHandle,另外兩個方法被ExceptionHandler註解修飾。

訪問目標方法,讓它拋異常,看控制檯列印結果,發現它拋了ArithmeticException:java.lang.ArithmeticException: / by zero這個異常

因此我們可以確定,ExceptionHandler的優先順序是:在異常的體系結構中,哪個異常與目標方法丟擲的異常血緣關係越緊密,就會被哪個捕捉到。

捕捉全域性的異常

ExceptionHandler只能捕捉同一個controller中的異常,其實我們也有辦法捕捉整個程式中所有的異常

新建一個類,加上@ControllerAdvice註解

package com.zj.controller;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;//處理異常@ControllerAdvicepublic class HandleForException {    @ExceptionHandler({ArithmeticException.class})    public String testArithmeticException(Exception e){        System.out.println("ArithmeticException:"+e);        return "error";    }}
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在這個類中使用ExceptionHandler,就能捕捉所有的controller中發生的異常

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述