1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        統(tǒng)一處理 try...catch 這么香,求求你不要再滿屏寫了!

        共 6985字,需瀏覽 14分鐘

         ·

        2021-07-18 16:48

        程序員的成長之路
        互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
        關(guān)注


        閱讀本文大概需要 2.8 分鐘。

        作者:小李子說程序
        https://urlify.cn/6naQjq

        前言

        軟件開發(fā)springboot項目過程中,不可避免的需要處理各種異常,spring mvc 架構(gòu)中各層會出現(xiàn)大量的try {...} catch {...} finally {...}代碼塊,不僅有大量的冗余代碼,而且還影響代碼的可讀性。
        這樣就需要定義個全局統(tǒng)一異常處理器,以便業(yè)務(wù)層再也不必處理異常。

        推薦理由

        • 代碼復(fù)制到項目中通過簡單的配置即可實現(xiàn)

        • 可以靈活的根據(jù)自己的業(yè)務(wù)異常進行更細粒度的擴展

        實踐

        1 封裝統(tǒng)一返回結(jié)果類

        源代碼

        public class AjaxResult {
         //是否成功
            private Boolean success;
            //狀態(tài)碼
            private Integer code;
            //提示信息
            private String msg;
            //數(shù)據(jù)
            private Object data;
            public AjaxResult() {

            }
            //自定義返回結(jié)果的構(gòu)造方法
            public AjaxResult(Boolean success,Integer code, String msg,Object data) {
                this.success = success;
                this.code = code;
                this.msg = msg;
                this.data = data;
            }
            //自定義異常返回的結(jié)果
            public static AjaxResult defineError(BusinessException de){
             AjaxResult result = new AjaxResult();
                result.setSuccess(false);
                result.setCode(de.getErrorCode());
                result.setMsg(de.getErrorMsg());
                result.setData(null);
                return result;
            }
            //其他異常處理方法返回的結(jié)果
            public static AjaxResult otherError(ErrorEnum errorEnum){
             AjaxResult result = new AjaxResult();
                result.setMsg(errorEnum.getErrorMsg());
                result.setCode(errorEnum.getErrorCode());
                result.setSuccess(false);
                result.setData(null);
                return result;
            }
         public Boolean getSuccess() {
          return success;
         }
         public void setSuccess(Boolean success) {
          this.success = success;
         }
         public Integer getCode() {
          return code;
         }
         public void setCode(Integer code) {
          this.code = code;
         }
         public String getMsg() {
          return msg;
         }
         public void setMsg(String msg) {
          this.msg = msg;
         }
         public Object getData() {
          return data;
         }
         public void setData(Object data) {
          this.data = data;
         }
            
        }

        2 自定義異常封裝類

        源碼:

        public class BusinessException extends RuntimeException {
         private static final long serialVersionUID = 1L;
         /**
          * 錯誤狀態(tài)碼
          */

         protected Integer errorCode;
         /**
          * 錯誤提示
          */

         protected String errorMsg;

         public BusinessException(){

             }

         public BusinessException(Integer errorCode, String errorMsg) {
                 this.errorCode = errorCode;
                 this.errorMsg = errorMsg;
             }

         public Integer getErrorCode() {
          return errorCode;
         }

         public void setErrorCode(Integer errorCode) {
          this.errorCode = errorCode;
         }

         public String getErrorMsg() {
          return errorMsg;
         }

         public void setErrorMsg(String errorMsg) {
          this.errorMsg = errorMsg;
         }
        }

        3 錯誤枚舉,拒絕硬編碼

        源碼

        public enum ErrorEnum {
         // 數(shù)據(jù)操作錯誤定義
         SUCCESS(200"成功"),
         NO_PERMISSION(403,"你沒得權(quán)限"),
         NO_AUTH(401,"未登錄"),
         NOT_FOUND(404"未找到該資源!"),
         INTERNAL_SERVER_ERROR(500"服務(wù)器異常請聯(lián)系管理員"),
         ;

         /** 錯誤碼 */
         private Integer errorCode;

         /** 錯誤信息 */
         private String errorMsg;

         ErrorEnum(Integer errorCode, String errorMsg) {
          this.errorCode = errorCode;
          this.errorMsg = errorMsg;
         }

            public Integer getErrorCode() {
                return errorCode;
            }

            public String getErrorMsg() {
                return errorMsg;
            }
        }

        4 全局異常處理類

        源碼

        /**
         * 全局異常處理器
         * 
         */

        @RestControllerAdvice
        public class GlobalExceptionHandler
        {
            private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);



            /**
             * 處理自定義異常
             *
             */

            @ExceptionHandler(value = BusinessException.class)
            public AjaxResult bizExceptionHandler(BusinessException e
        {
             log.error(e.getMessage(), e);
                return AjaxResult.defineError(e);
            }

            /**
             *處理其他異常
             *
             */

            @ExceptionHandler(value = Exception.class)
            public AjaxResult exceptionHandlerException e
        {
              log.error(e.getMessage(), e);
                return AjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);
               
            }

        }

        5 測試

        返回結(jié)果:
        <END>

        推薦閱讀:

        最強代碼生成器平臺,殺瘋了~

        面試官:Redis用過是吧?那你講講Redis都有哪些監(jiān)控指標(biāo)?

        最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

        獲取方式:點個「在看」,點擊上方小卡片,進入公眾號后回復(fù)「面試題」領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

        朕已閱 

        瀏覽 20
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人免费毛片 高清视频 | 国产黄片入口 | 免费无码婬片AAAA片视频 | 天堂a 中文在线 | 18禁 网站 乱伦视频一区二区 | www.男人天堂.com | 国产精品爽爽久久久 | 车上疯狂做爰 | 狂操小嫩逼 | 少萝裸体电影 |