91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何實現Springboot全局異常處理

發布時間:2021-11-01 17:42:54 來源:億速云 閱讀:216 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Java中如何實現Springboot全局異常處理”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java中如何實現Springboot全局異常處理”這篇文章吧。

    一、思路?

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

    二、步驟

    1.自定義接口:

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

    public interface ErrorType {
        /**
         * 返回code
         *
         * @return
         */
        String getCode();
        /**
         * 返回mesg
         *
         * @return
         */
        String getMesg();
    }

    2.自定義錯誤枚舉

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

    @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.自定義異常類

    @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.異常捕獲

    @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.在代碼中拋異常

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

    @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拋出,等待全局異常捕獲

    以上是“Java中如何實現Springboot全局異常處理”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    汶上县| 进贤县| 威海市| 西吉县| 广州市| 正宁县| 长阳| 新河县| 鄢陵县| 旌德县| 濮阳县| 盘山县| 始兴县| 安泽县| 定南县| 永宁县| 丹凤县| 凤阳县| 左贡县| 泰兴市| 天津市| 靖宇县| 五峰| 景泰县| 岳阳县| 娄烦县| 济源市| 渑池县| 江西省| 宣化县| 井陉县| 德清县| 张家界市| 南城县| 卢氏县| 梁平县| 华亭县| 健康| 乌苏市| 延庆县| 安图县|