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 這么香,求求你不要再滿屏寫了,再發(fā)現(xiàn)扣績效!

        共 6823字,需瀏覽 14分鐘

         ·

        2021-07-13 18:50

        點(diǎn)擊上方 藍(lán)色字體,選擇“置頂公眾號”

        優(yōu)質(zhì)文章,第一時間送達(dá)

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

        前言

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

        推薦理由

        • 代碼復(fù)制到項目中通過簡單的配置即可實(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;
         /**
          * 錯誤狀態(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é)果:

        推薦大家關(guān)注三個公眾號

        專注于Java后端編程

        專注于前端技術(shù)編程


        專注于Python人工智能編程

        瀏覽 73
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        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>
            日本东京热视频网址大全 | 中文字幕有码视频 | 亚洲无码专区视频 | 黄a视频| 大尺度做爰啪啪床戏 | 淫色插插| 国产精品偷窥熟女精品视频步 | 一级a免一级a做免费韩国下载 | 91精品人妻AⅤ一区二区 | 豆花成人网站 |