關於門面服務統一攔截,統一異常處理的方法

一、定義一個通用的Result類

目的是保證整個系統有一個通用的響應對象,這樣統一處理會比較方便

public class Result<T> implements Serializable{

     private boolean success = true;//業務是否處理成功

      private String code;//業務處理的錯誤碼 

     private String message;//業務處理的描述信息

     private T data;   // 真實的業務結果對象

    public static <T> Result<T> create() {

        return new Result<T>();

    }

    public static <T> Result<T> success(T data) {

        Result<T> result = new Result<T>();

        result.setData(data);

        return result;

    }

public Result<T> error(String code, String message) {

        this.setSuccess(false);

        this.setCode(code);

        this.setMessage(message);

        return this;

    }

}

二、統一處理的抽象基礎類

所有的門面服務都應該繼承該抽象類

public abstract class BaseService {

public <T> Result<T> handle(BaseRequest request, Function<Object, Object> function) {

      private Logger logger = LoggerFactory.getLogger(this.getClass());

try {

              logger.info("request begin,request:{},function:{}", JSON.toJSON(request),

                JSON.toJSON(function));

                request = beforeHandle(request);

                Object response = function.apply(request);

               Result<T> result = afterHandle(request, response);     

              logger.info("request end,response:{}", JSON.toJSON(result));

               return result;             

   }catch(ExceptionA e) {//自定義異常

              Result<T> result = handleException(e);

              return result;

  }catch(ExceptionB e) {//自定義異常

           logger.error("ExceptionB :" + e.getMessage() + ",response:"+ JSON.toJSONString(result), e);

            Result<T> result = handleException(e);

              return result;

  }catch(Exception e) {// 未知異常

             Result<T> result = handleException(e);

              return result;

  }

}

}

 

三、門面服務繼承統一攔截服務

public class AFacadeServiceImpl extends BaseService implements AService {

    private ABizService aBizService;

    public Result<AQueryResponse> query(AQueryRequest request) {

        return this.handle(request, fun -> aBizService.query(request));

    }

}

做到這一步,就可以實現統一的業務、異常、日誌的統一攔截了。

 

發佈了34 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章