Spring的異常處理@ExceptionHandler注解解析
Spring的異常處理
為什么需要對異常進行處理?
假如SpringMvc我們不對異常進行任何處理, 界面上顯示的是這樣的,假設進行除計算,除數(shù)是0會報錯.:

方法一 @ExceptionHandler
當一個Controller中有方法加了@ExceptionHandler之后,這個Controller其他方法中沒有捕獲的異常就會以參數(shù)的形式傳入加了@ExceptionHandler注解的那個方法中。
@Controller
@RequestMapping("/testController")
public class TestController {
@RequestMapping("/demo1")
@ResponseBody
public Object demo1(){
//不需要try {} catch {}
int i = 1 / 0;
return new Date();
}
//TestController 內的任何異常都會被兜住
@ExceptionHandler({RuntimeException.class})
public ModelAndView fix(Exception ex){
System.out.println("do This");
return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
}
}注意事項:
- 一個Controller下多個@ExceptionHandler上的異常類型不能出現(xiàn)一樣的,否則運行時拋異常.
Ambiguous @ExceptionHandler method mapped for;
- @ExceptionHandler下方法返回值類型支持多種,常見的ModelAndView,@ResponseBody注解標
方法返回值可以為:
ModelAndView對象
Model對象
Map對象
View對象
String對象
還有@ResponseBody、HttpEntity<?>或ResponseEntity<?>,以及void
缺點: 幾乎所有的Controller都需要進行異常處理,于是每個Controller都需要去寫一個方法,不太方便
方法二 @ControllerAdvice+@ExceptionHandler
@ControllerAdvice注解聲明一個注解類,這個注解類中的方法的某些注解會應用到所有的Controller里,其中就包括@ExceptionHandler注解。
/**
* Created by liuruijie on 2016/12/28.
* 全局異常處理,捕獲所有Controller中拋出的異常。
*/
@ControllerAdvice
public class GlobalExceptionHandler {
//處理自定義的異常
@ExceptionHandler(SystemException.class)
@ResponseBody
public Object customHandler(SystemException e){
e.printStackTrace();
return WebResult.buildResult().status(e.getCode()).msg(e.getMessage());
}
//其他未處理的異常
@ExceptionHandler(Exception.class)
@ResponseBody
public Object exceptionHandler(Exception e){
e.printStackTrace();
return WebResult.buildResult().status(Config.FAIL).msg("系統(tǒng)錯誤");
}
}到此這篇關于Spring的異常處理@ExceptionHandler注解解析的文章就介紹到這了,更多相關Spring的異常處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Spring中的@ExceptionHandler注解統(tǒng)一異常處理詳解
- SpringMVC使用@ExceptionHandler注解在Controller中處理異常
- 關于SpringBoot使用@ExceptionHandler注解局部異常處理
- Spring中@ExceptionHandler注解的使用方式
- Spring中@ExceptionHandler注解的工作原理詳解
- Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名
- Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常
- Spring中的@ExceptionHandler注解詳解與應用示例
相關文章
java實現(xiàn)附件預覽(openoffice+swftools+flexpaper)實例
本篇文章主要介紹了java實現(xiàn)附件預覽(openoffice+swftools+flexpaper)實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-10-10
SpringBoot高效實現(xiàn)API限流的多種方法實戰(zhàn)
本文介紹了在SpringBoot項目中實現(xiàn)限流的多種方法,包括使用Guava庫的GuavaRateLimiter、基于Redis的分布式限流、Resilience4j限流器以及通過自定義過濾器實現(xiàn)API限流,感興趣的可以了解一下2026-01-01
Java Web程序中利用Spring框架返回JSON格式的日期
這里我們來介紹一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat時要引入一個類庫joda-time-版本.jar,否則會無法訪問相應路徑2016-05-05
SpringBoot實現(xiàn)系統(tǒng)監(jiān)控的完整示例
本文介紹了如何對SpringBoot應用進行系統(tǒng)監(jiān)控,包括監(jiān)控的重要性、詳細步驟以及最佳實踐,監(jiān)控可以幫助我們預防問題、快速定位和解決,提升系統(tǒng)性能和開發(fā)體驗,需要的朋友可以參考下2025-12-12

