<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          公司這套架構(gòu)統(tǒng)一處理 try...catch,很牛逼!

          共 6926字,需瀏覽 14分鐘

           ·

          2021-05-29 23:51

          微信搜索逆鋒起筆關(guān)注后回復(fù)編程pdf
          領(lǐng)取編程大佬們所推薦的 23 種編程資料!

          作者:小李子說程序
          www.toutiao.com/i6878184496945070604

          前言

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

          推薦理由

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

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

          實踐

          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

          Windows 10 最新版壁紙下載
          學(xué)計算機的女生都怎樣了?
          用 Python 做一個游戲輔助腳本!
          實戰(zhàn):利用 Python 開發(fā) App
          如何理解 Python 之禪:Explicit is better than implicit?


          支持下 
          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人插人人射 | 国产精品久久久久久欧美 | 欧美操人视频 | 久久综合久色欧美综合狠狠 | 曰韩人妻一区二区 |