一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Springboot全局異常處理

Java Springboot全局異常處理

2022-03-08 13:42超多多和劉寶寶的代碼世 Java教程

這篇文章主要給大家介紹了關于Springboot全局異常處理的資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

對于作為菜鳥程序員的我來說,經常在controller使用try-catch 來包裹住我的service層代碼,首頁,他及其的不好看,其次,每個方法都有這種代碼塊,思考有沒有辦法去掉它,并且優雅的處理異常。這就是今天要說的全局異常捕獲

提示:以下是本篇文章正文內容,下面案例可供參考

一、思路?

springboot提供了全局異常處理的注解,我們需要弄明白的是。撲捉什么異常,結果如果返回,如何優雅的管理返回的結果集。

二、步驟

1.自定義接口:

自定義接口主要是描述返回的code碼和返回msg,自定義錯誤描述枚舉需要實現這個接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface ErrorType {
    /**
     * 返回code
     *
     * @return
     */
    String getCode();
    /**
     * 返回mesg
     *
     * @return
     */
    String getMesg();
}

2.自定義錯誤枚舉

使用枚舉,看起來代碼很優雅,并且不用使用static final來定義類型。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Getter
public enum SystemErrorType implements ErrorType {
    SYSTEM_ERROR("-1", "系統異常"),
    SYSTEM_BUSY("000001", "系統繁忙,請稍候再試");
    /**
     * 錯誤類型碼
     */
    private String code;
    /**
     * 錯誤類型描述信息
     */
    private String mesg;
    SystemErrorType(String code, String mesg) {
        this.code = code;
        this.mesg = mesg;
    }
}

3.自定義異常類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Getter
public class MyException extends RuntimeException{
    /**
     * 異常對應的錯誤類型
     */
  private final ErrorType errorType;
   /**
    * 默認是系統異常
    */
   public MyException () {
       this.errorType = SystemErrorType.SYSTEM_ERROR;
   }
   public MyException(SystemErrorType systemErrorType) {
       this.errorType = systemErrorType;
    }

4.異常捕獲

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandlerAdvice extends DefaultGlobalExceptionHandlerAdvice {
    @ExceptionHandler(value = {MyException .class})
    public Result MyException (MyException ex) {
        log.error(ex.getMessage());
        return Result.fail(ex.getErrorType());
    }
    @ExceptionHandler(value = {NotRoleException.class})
    public Result NotRoleException(NotRoleException nle) {
        // 打印堆棧,以供調試
        //nle.printStackTrace();
        String message = "該功能僅供"+nle.getRole()+"使用!";
        // 返回給前端
        return Result.fail("090017",message,null);
    }
}

也不是說只能通過枚舉來返回,只要你的返回工具類支持參數填寫,可以做類似于第二種的返回,但是這樣方法對于返回的code來太好管理

5.在代碼中拋異常

比如我做判空處理時,利用枚舉作為參數返回

?
1
2
3
4
5
6
7
8
@PostMapping("/listQuestionVO")
public Result listQuestionBankVO(@RequestBody QuestionBankQuery query){
    if (query.getPageNum()==null || query.getPageSize()==null){
        return Result.fail(QuestionnaireErrorType.PARAMETERISNULL_ERROR);
    }
    Result result = questionBankService.listQuestionBankVO(query);
    return result;
}

實際上,你可以在你需要處理異常的地方直接throws異常,可以直接在方法上throws拋出,等待全局異常捕獲

總結

只要管理code到位,用返回類型的工具類來替換枚舉更適合小白

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/qq_48329942/article/details/121034245

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 1024免费观看完整版在线播放 | 国色天香社区视频免费观看3 | 日本偷偷操 | 无码毛片内射白浆视频 | 好大好深好舒服 | 久久精品手机观看 | 91传媒在线观看 | 美女在线看永久免费网址 | 欧美性色老妇人 | 国产视频中文字幕 | 91精品综合 | 嘉嘉的丝袜美腿白丝 | 亚洲视频在线一区二区 | 色综合亚洲天天综合网站 | 范冰冰a级一级特级毛片 | 午夜神器18以下不能进免费 | 女人张开腿让男人桶视频免费大全 | 轻轻色在线视频中文字幕 | 欧美一卡2卡3卡四卡海外精品 | 白丝萝莉h | 好女孩韩剧免费观看 | 亚洲欧美一区二区三区在饯 | 成人在线视频在线观看 | 激情影院网站 | 色婷婷在线播放 | 久久久久久免费观看 | 午夜尤物| 91啪在线观看国产在线 | 亚洲国产成人精品不卡青青草原 | 9lporm自拍视频在线 | 被强迫调教的高辣小说 | 午夜爱爱爱爱爽爽爽视频网站 | 久久人妻无码毛片A片麻豆 久久热这里只有 精品 | 翁熄性放纵交换01 | 日本中文字幕一区二区高清在线 | 国产伊人网 | 5278欧美一区二区三区 | 小早川怜子息梦精在线播放 | 精品区2区3区4区产品乱码9 | freese×video性欧美丝袜 | 青草青青在线视频观看 |