关于门面服务统一拦截,统一异常处理的方法

一、定义一个通用的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));

    }

}

做到这一步,就可以实现统一的业务、异常、日志的统一拦截了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值