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>

        不要再滿屏寫 try...catch 了!這個(gè)更香!

        共 6985字,需瀏覽 14分鐘

         ·

        2021-06-30 22:52

        來(lái)源:www.toutiao.com/i6878184496945070604

        前言

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

        推薦理由

        • 代碼復(fù)制到項(xiàng)目中通過(guò)簡(jiǎn)單的配置即可實(shí)現(xiàn)

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

        實(shí)踐

        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;
         /**
          * 錯(cuò)誤狀態(tài)碼
          */

         protected Integer errorCode;
         /**
          * 錯(cuò)誤提示
          */

         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 錯(cuò)誤枚舉,拒絕硬編碼

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

         /** 錯(cuò)誤碼 */
         private Integer errorCode;

         /** 錯(cuò)誤信息 */
         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 測(cè)試

        返回結(jié)果:
        —————END—————

        推薦閱讀:

        一款Java工具庫(kù),讓你的代碼量減少80%
        一款基于 SpringBoot 的接口快速開發(fā)框架
        據(jù)說(shuō)Java程序員等電梯的時(shí)候,都想過(guò)調(diào)度算法
        還在用分頁(yè)?太Low !試試 MyBatis 流式查詢!

        最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
        獲取方式:關(guān)注公眾號(hào)并回復(fù) java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
        明天見(jiàn)(??ω??)??
        瀏覽 69
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        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>
            污视频网站免费在线观看| 在线播放亚洲| 精品人妻一区二区| 最新AV在线| 99精品免费| 3344gc在线观看入口| 亚洲AV免费看| 无码人妻一区二区三区免费n鬼沢| 黄色一级在线观看| 国产亚洲Av|