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

          不要再滿屏寫 try...catch 了!這個更香!

          共 7123字,需瀏覽 15分鐘

           ·

          2021-03-20 09:30

          往期熱門文章:

          1、往期精選優(yōu)秀博文都在這里了!
          2、分庫分表?如何做到永不遷移數(shù)據(jù)和避免熱點?
          3、36 張圖梳理 Intellij IDEA 常用設(shè)置,寫代碼賊爽!
          4、2020年國內(nèi)互聯(lián)網(wǎng)公司的薪酬排名!
          5、不要再封裝各種Util工具類了,這個神級框架值得擁有!

          來源: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 測試

          返回結(jié)果:

          往期熱門文章:

          1、歷史文章分類導讀列表!精選優(yōu)秀博文都在這里了!》

          2、阿里一面:如何保障消息100%投遞成功、消息冪等性?
          3、GitHub 熱榜:被網(wǎng)友瘋狂惡搞的「螞蟻呀嘿」項目終于開源了!
          4、記住!看小電影前一定要檢查一下域名是不是 HTTPS 的,不然....
          5、拿到年終獎后馬上辭職,厚道嗎?
          6、Redis 內(nèi)存滿了怎么辦?
          7、在 IDE 中玩轉(zhuǎn) GitHub
          8、死磕18個Java8日期處理,工作必用!
          9、把我坑慘的一個MySQL雙引號!
          10、2021年 我辭職了!

          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  毛片导航| 男女啪啪国产免费网站 | 8050午夜一级 | 欧美色图网站 | 无码在线看 |