SpringBoot全局異常處理


一、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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM