一、try/catch異常處理的缺陷
在開發SpringBoot應用時,往往會遇到以下情景:在某個接口中,存在一些可能的異常。比如url參數錯誤、用戶賬號和密碼錯誤等。這時我們可以在發生異常的地方拋出我們自定義的異常,並對異常進行處理,就像下面這樣:
@RequestMapping("/test")
public BosCommonResponse test() {
try {
//業務代碼
throw new BadRequestParameterException();
}catch(BadRequestParameterException e) {
//異常處理
}
return new BosCommonResponse();
}
然而,這么做的問題是,對於每一種異常,我們都需要編寫try/catch語句進行處理。代碼因此變的冗長,而且一旦需要修改某種異常,則所有使用了該異常的接口都需要修改。
二、引入全局異常處理
為了解決這一問題,Spring3.2中新增了@ControllerAdvice注解,可以通過該注解配置一個全局異常處理類,它能統一處理Controller中拋出的異常而不需要書寫try/catch語句。
三、全局異常處理的使用
1、自定義異常類
public class BadRequestParameterException extends RuntimeException { public BadRequestParameterException() { } public BadRequestParameterException(String msg) { super(msg); } }
注意:自定義異常類必須繼承自RuntimeException才可以
2、配置全局異常處理類
@ControllerAdvice public class GlobalExceptionHandler { /** * 處理BadRequestParameterException異常 * */ @ExceptionHandler(value = BadRequestParameterException.class) public BosCommonResponse badRequestParameterException(HttpServletRequest req, BadRequestParameterException e) { return new BosCommonResponse(); } }
3、Controller中遇到異常直接拋出即可
throw new BadRequestParameterException()
