<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>

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

          共 6985字,需瀏覽 14分鐘

           ·

          2021-07-18 16:48

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


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

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

          前言

          軟件開(kāi)發(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é)果類(lèi)

          源代碼

          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 自定義異常封裝類(lèi)

          源碼:

          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 全局異常處理類(lèi)

          源碼

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

          @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>

          推薦閱讀:

          最強(qiáng)代碼生成器平臺(tái),殺瘋了~

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

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

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

          朕已閱 

          瀏覽 20
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  亚洲精品永久久久久久 | 五月天堂影院 | 国产精品久久久久久久久免费挑花 | w超清无码在线观看 | 国产一级二级三级片 |