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

          共 6985字,需瀏覽 14分鐘

           ·

          2021-06-30 22:52

          來源: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ù)異常進行更細粒度的擴展

          實踐

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

          推薦閱讀:

          一款Java工具庫,讓你的代碼量減少80%
          一款基于 SpringBoot 的接口快速開發(fā)框架
          據(jù)說Java程序員等電梯的時候,都想過調(diào)度算法
          還在用分頁?太Low !試試 MyBatis 流式查詢!

          最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
          獲取方式:關(guān)注公眾號并回復(fù) java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
          明天見(??ω??)??
          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产男女操逼 | 豆花视频在线网站 | 天天日日天天干 | 99免费金品6 | 免费一级片电影网站 |