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 了!這個更香!

        共 6815字,需瀏覽 14分鐘

         ·

        2021-03-26 07:15

        來源:www.toutiao.com/i6878184496945070604

        前言

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

        推薦理由

        • 代碼復制到項目中通過簡單的配置即可實現(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 測試


        ——————END——————

        歡迎關(guān)注“Java引導者”,我們分享最有價值的Java的干貨文章,助力您成為有思想的Java開發(fā)工程師!


        瀏覽 46
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        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>
            天天色天天操屄 | 日韩成人精品在线观看 | 无码人妻 一区二区三区 | 一夲道一区二区三区视频 | 在线一区视频 | 被主人抽b打x羞辱 | 小h短篇辣肉各种姿势老师 | 分娩偷拍91色 | 无码电影一区 | 日本操逼图 |