一、@ControllerAdvice注解的作用
??????? 從Spring 3.2開始,Spring 提供了一個新注解@ControllerAdvice, @ControllerAdvice有以下兩個作用。
???? 注解作用在類上時可以增強Controller,對Controller中被@RequestMapping注解標注的方法加一些邏輯處理。???? @ControllerAdvice注解結合方法型注解@ExceptionHandler,可以捕獲Controller中拋出的指定類型的異常,從而實現不同類型的異常統一處理。
?接下來通過一個案例演示使用注解實現異常的分類處理,具體實現步驟如下所示。?
? ? ? ? ?1、創建名稱為ExceptionAdvice的異常處理器。
????????ExceptionAdvice類中定義2個處理不同異常的方法,其中doMyException()方法用來處理Handler執行時拋出的自定義異常, doOtherException()方法用來處理Handler執行時拋出的系統異常。
import com.itheima.exception.MyException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;import java.io.IOException;@ControllerAdvice
public class ExceptionAdvice {//處理MyException類型的異常@ExceptionHandler(MyException.class)public ModelAndView doMyException(MyException ex) throws IOException {ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("msg", ex.getMessage());modelAndView.setViewName("error.jsp");return modelAndView;}//處理Exception類型的異常@ExceptionHandler(Exception.class)public ModelAndView doOtherException(Exception ex) throws IOException {ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("msg", "網絡異常!");modelAndView.setViewName("error.jsp");return modelAndView;}
}
? ? ? ? 2、啟動chapter13項目,在瀏覽器中訪問地址http://localhost:8080/chapter13/showNullPointer,程序將執行showNullPointer()方法。
? ? ? ? 3、在瀏覽器中訪問地址http://localhost:8080/chapter13/addData,程序將執行addData()方法。
????????從步驟2和步驟3所示的頁面顯示效果可以得出,使用@ControllerAdvice注解和@ExceptionHandler注解實現的異常分類處理,效果和上一節使用自定義異常處理器一樣。