• 统一异常/服务处理


    java开发中的异常可以通过切面@RestControllerAdvice统一进行处理返回。

    但为了包装统一服务调用和统一异常可以包装一波:

    一、包装异常类

    @EqualsAndHashCode(callSuper = true)
    @Data
    public class MyException extends RuntimeException {
        private Integer code;
    
        private String message;
    
        public MyException() {
            super(CommonResultEnum.FAIL.desc());
            this.code = CommonResultEnum.FAIL.code();
            this.message = CommonResultEnum.FAIL.desc();
        }
    
        public MyException(ResultativeEnum result) {
            super(result.desc());
            this.code = result.code();
            this.message = result.desc();
        }
    
        public MyException(ResultativeEnum result, String message) {
            super(message);
            this.code = result.code();
            this.message = result.desc();
        }
    
        public MyException(ResultativeEnum result, String format, String... args) {
            super(MessageFormatter.arrayFormat(format, args).getMessage());
            this.code = result.code();
            this.message = super.getMessage();
        }
    
        public MyException(Throwable cause) {
            super(cause);
            this.message = this.getMessage();
        }
    
        public MyException(ResultativeEnum result, Throwable cause) {
            super(result.desc(), cause);
            this.code = result.code();
            this.message = result.desc();
        }
    
        public MyException(Integer code) {
            this.code = code;
        }
    
        public MyException(String message, Integer code) {
            super(message);
            this.code = code;
        }
    
        public MyException(String message, Throwable cause, Integer code) {
            super(message, cause);
            this.code = code;
        }
    
        public MyException(Throwable cause, Integer code) {
            super(cause);
            this.code = code;
        }
    
        public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, Integer code) {
            super(message, cause, enableSuppression, writableStackTrace);
            this.code = code;
        }
    }
    View
    @Data
    public class MyException extends RuntimeException {
        private Integer code;
        private String message;
        public MyException() {
            super(CommonResultEnum.FAIL.desc());
            this.code = CommonResultEnum.FAIL.code();
            this.message = CommonResultEnum.FAIL.desc();
        }
        public MyException(ResultativeEnum result) {
            super(result.desc());
            this.code = result.code();
            this.message = result.desc();
        }
        public MyException(ResultativeEnum result, String message) {
            super(message);
            this.code = result.code();
            this.message = result.desc();
        }
        public MyException(ResultativeEnum result, String format, String... args) {
            super(MessageFormatter.arrayFormat(format, args).getMessage());
            this.code = result.code();
            this.message = super.getMessage();
        }
        public MyException(Throwable cause) {
            super(cause);
            this.message = this.getMessage();
        }
        public MyException(ResultativeEnum result, Throwable cause) {
            super(result.desc(), cause);
            this.code = result.code();
            this.message = result.desc();
        }
        public MyException(Integer code) {
            this.code = code;
        }
        public MyException(String message, Integer code) {
            super(message);
            this.code = code;
        }
        public MyException(String message, Throwable cause, Integer code) {
            super(message, cause);
            this.code = code;
        }
        public MyException(Throwable cause, Integer code) {
            super(cause);
            this.code = code;
        }
        public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, Integer code) {
            super(message, cause, enableSuppression, writableStackTrace);
            this.code = code;
        }

    二、封装统一处理类

    @Slf4j
    public class MyHandler<T, R> {
        public Response<R> handle(Function<T, R> func, T t) {
            try {
                R result = func.apply(t);
                return Response.success(result).build();     //统一服务处理
            } catch (MyException ex) {
                log.error("fail to handle ex", ex);
                return Response.<R>fail(null, ex.getCode(), ex.getMessage()).build();  //统一异常处理
            } catch (Exception e) {
                log.error("cause un handle exception", e);
                return Response.<R>fail(null, 500, "服务异常").build();
            }
        }
    }
     

    三、调用统一处理

      public Response<Page<ApiQueryRespVO>> queryApi(@RequestBody @Validated ApiQueryDTO request) {
            MyHandler<ApiQueryDTO, Page<ApiQueryRespVO>> exHandler = new MyHandler<>();
            return exHandler.handle(apiService::queryApis, request);

    以上使用了函数式编程,将服务进行统一处理,异常进行统一处理。

  • 相关阅读:
    elasticsearch
    CentOS6.9安装Logstash
    CentOS6.9安装Filebeat监控Nginx的访问日志发送到Kafka
    openresty capture
    CentOS6.9安装socat
    CentOS挂Windows的NFS备忘
    openCV 备忘
    rabbitmq更换数据文件和日志文件的存放位置
    根据某个文件或文件夹自制rpm包
    checkinstall打包工具使用
  • 原文地址:https://www.cnblogs.com/shuchen007/p/14460888.html
Copyright © 2020-2023  润新知