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

          共 7155字,需瀏覽 15分鐘

           ·

          2021-03-19 11:42

          往期熱門文章:

          1、Spring 中經(jīng)典的 9 種設(shè)計(jì)模式!收藏了

          2、高仿小米商城項(xiàng)目,愛了!

          3、為什么有些公司不讓用 Lombok ?

          4、厲害了,為了干掉 HTTP ,Spring 團(tuán)隊(duì)開源了 nohttp 項(xiàng)目!

          5、別瞎學(xué)了,這幾門語言要被淘汰了!

          來源:www.toutiao.com/i6878184496945070604

          前言

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

          推薦理由

          • 代碼復(fù)制到項(xiàng)目中通過簡(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,"你沒得權(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é)果:

          最近熱文閱讀:

          1、Spring 中經(jīng)典的 9 種設(shè)計(jì)模式!收藏了
          2、高仿小米商城項(xiàng)目,愛了!
          3、為什么有些公司不讓用 Lombok ?
          4、厲害了,為了干掉 HTTP ,Spring 團(tuán)隊(duì)開源了 nohttp 項(xiàng)目!
          5、別瞎學(xué)了,這幾門語言要被淘汰了!
          6、一個(gè)基于 Spring Boot 的項(xiàng)目骨架,非常舒服!
          7、Redis 低成本、高可用設(shè)計(jì),牛逼!
          8、2020年國(guó)內(nèi)互聯(lián)網(wǎng)公司的薪酬排名!
          9、IDEA 真牛逼,900行 "又臭又長(zhǎng)" 的類重構(gòu),幾分鐘搞定!
          10、舒服!一個(gè)注解,搞定 SpringBoot 操作日志
          關(guān)注公眾號(hào),你想要的Java都在這里

          瀏覽 53
          點(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>
                  夜撸日撸香蕉视频 | 中字三级视频网站在线观看 | AV无码中文| 国模视频网 | 91热视频 |