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

方法一 @ExceptionHandler
當(dāng)一個(gè)Controller中有方法加了@ExceptionHandler之后,這個(gè)Controller其他方法中沒(méi)有捕獲的異常就會(huì)以參數(shù)的形式傳入加了@ExceptionHandler注解的那個(gè)方法中。
@Controller
@RequestMapping("/testController")
public class TestController {
@RequestMapping("/demo1")
@ResponseBody
public Object demo1(){
//不需要try {} catch {}
int i = 1 / 0;
return new Date();
}
//TestController 內(nèi)的任何異常都會(huì)被兜住
@ExceptionHandler({RuntimeException.class})
public ModelAndView fix(Exception ex){
System.out.println("do This");
return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
}
}注意事項(xiàng):
- 一個(gè)Controller下多個(gè)@ExceptionHandler上的異常類型不能出現(xiàn)一樣的,否則運(yùn)行時(shí)拋異常.
Ambiguous @ExceptionHandler method mapped for;
- @ExceptionHandler下方法返回值類型支持多種,常見(jiàn)的ModelAndView,@ResponseBody注解標(biāo)
方法返回值可以為:
ModelAndView對(duì)象
Model對(duì)象
Map對(duì)象
View對(duì)象
String對(duì)象
還有@ResponseBody、HttpEntity<?>或ResponseEntity<?>,以及void
缺點(diǎn): 幾乎所有的Controller都需要進(jìn)行異常處理,于是每個(gè)Controller都需要去寫(xiě)一個(gè)方法,不太方便
方法二 @ControllerAdvice+@ExceptionHandler
@ControllerAdvice注解聲明一個(gè)注解類,這個(gè)注解類中的方法的某些注解會(huì)應(yīng)用到所有的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)錯(cuò)誤");
}
}到此這篇關(guān)于Spring的異常處理@ExceptionHandler注解解析的文章就介紹到這了,更多相關(guān)Spring的異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring中的@ExceptionHandler注解統(tǒng)一異常處理詳解
- SpringMVC使用@ExceptionHandler注解在Controller中處理異常
- 關(guān)于SpringBoot使用@ExceptionHandler注解局部異常處理
- Spring中@ExceptionHandler注解的使用方式
- Spring中@ExceptionHandler注解的工作原理詳解
- Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名
- Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常
- Spring中的@ExceptionHandler注解詳解與應(yīng)用示例
相關(guān)文章
java實(shí)現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實(shí)例
本篇文章主要介紹了java實(shí)現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-10-10
Java實(shí)現(xiàn)添加文字水印和圖片水印功能
為圖片添加水印是一種常用的圖片處理技術(shù),本文主要介紹了Java實(shí)現(xiàn)添加文字水印和圖片水印功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
SpringBoot高效實(shí)現(xiàn)API限流的多種方法實(shí)戰(zhàn)
本文介紹了在SpringBoot項(xiàng)目中實(shí)現(xiàn)限流的多種方法,包括使用Guava庫(kù)的GuavaRateLimiter、基于Redis的分布式限流、Resilience4j限流器以及通過(guò)自定義過(guò)濾器實(shí)現(xiàn)API限流,感興趣的可以了解一下2026-01-01
Java Web程序中利用Spring框架返回JSON格式的日期
這里我們來(lái)介紹一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat時(shí)要引入一個(gè)類庫(kù)joda-time-版本.jar,否則會(huì)無(wú)法訪問(wèn)相應(yīng)路徑2016-05-05
Nacos服務(wù)注冊(cè)與發(fā)現(xiàn)原理解讀
Nacos是阿里巴巴開(kāi)源的微服務(wù)組件,支持服務(wù)注冊(cè)、發(fā)現(xiàn)及配置管理,采用客戶端心跳維護(hù)、服務(wù)端推送與長(zhǎng)輪詢同步,結(jié)合健康檢查機(jī)制,實(shí)現(xiàn)高效可靠的微服務(wù)治理2025-08-08
SpringBoot實(shí)現(xiàn)系統(tǒng)監(jiān)控的完整示例
本文介紹了如何對(duì)SpringBoot應(yīng)用進(jìn)行系統(tǒng)監(jiān)控,包括監(jiān)控的重要性、詳細(xì)步驟以及最佳實(shí)踐,監(jiān)控可以幫助我們預(yù)防問(wèn)題、快速定位和解決,提升系統(tǒng)性能和開(kāi)發(fā)體驗(yàn),需要的朋友可以參考下2025-12-12

