更新時間:2021-09-10 10:20:46 來源:動力節點 瀏覽1273次
該方式進行異常處理的方法必須與出錯的方法在同一個Controller里面。使用如下:
// 這個異常處理只會在本類中起作用
@ExceptionHandler(RuntimeException.class)
public String catchException(RuntimeException e){
System.out.println(e.getMessage());
return "error";
}
這種異常處理可以根據不同的異常在同一個Controller中配置多個,但是它們只能在該Controller中起作用。
HandlerExceptionResolver是SpringMVC為我們提供的一個統一異常處理的接口,實現機制也十分簡單。注意該類要注入到spring中。
@Component
public class GlobalException implements HandlerExceptionResolver {
// 自定義全局異常處理在mvc一直起作用
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
if (e instanceof MyException) {
return new ModelAndView("error1");
} else if (e instanceof RuntimeException){
return new ModelAndView("error2");
}
return new ModelAndView("error3");
}
這種方式也可以進行異常處理,而且是全局。但是這種方式也有一定的弊端,全部的處理都打在一個方法里面,沒有解耦合,后期不利于我們維護。
為了結合上面倆種方式的優點,Spring3.2為我們提供了一個新的注解@ControllerAdvice。注意該類要注入到spring中。
@ControllerAdvice
@Component
public class HandlerAndAdvice {
@ExceptionHandler(RuntimeException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST) //這里還可以配置響應的狀態哦
@ResponseBody
public String catchRuntime() {
return "運行時發生了不可描述的錯誤偶偶偶偶局";
}
@ExceptionHandler(MyException.class)
public String catchMy(){
return "myError";
}
}
這種方式在本類使用@ControllerAdvice+ @ExceptionHandler的方式實現全局配置,代碼解耦合,可以對不同的異常進行單獨處理,配置更加靈活,后期的維護和添加異常處理也更加方便。
以上就是動力節點小編介紹的"SpringMVC異常處理的三種方式 ",希望對大家有幫助,想了解更多可查看SpringMVC教程。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習