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

          CTO以后不讓用try...catch了,還說再發(fā)現(xiàn)扣績效。。。

          共 3754字,需瀏覽 8分鐘

           ·

          2020-12-03 13:12

          點擊上方[全棧開發(fā)者社區(qū)]右上角[...][設(shè)為星標?]

          前言

          軟件開發(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?exceptionHandler(?Exception?e)?{
          ??????log.error(e.getMessage(),?e);
          ????????return?AjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);
          ???????
          ????}

          }

          5 測試

          返回結(jié)果:

          作者:小李子說程序

          toutiao.com/i6878184496945070604/


          覺得本文對你有幫助?請分享給更多人

          關(guān)注「全棧開發(fā)者社區(qū)」加星標,提升全棧技能


          本公眾號會不定期給大家發(fā)福利,包括送書、學習資源等,敬請期待吧!

          如果感覺推送內(nèi)容不錯,不妨右下角點個在看轉(zhuǎn)發(fā)朋友圈或收藏,感謝支持。


          好文章,留言、點贊、在看和分享一條龍吧??

          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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免费看 | 亚洲人7777 | 国产精品久久久夜色 | 免费操逼视频网站 | 派遣素描模特儿居家作画 却假藉 |