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

mac2025-06-06  61

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

    }

}

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

 

最新回复(0)