zoukankan      html  css  js  c++  java
  • 使用自定义注解和springAOP捕获Service层异常,并处理自定义异常

    一 自定义异常

    /**
     * 自定义参数为null异常
     */
    public class NoParamsException extends Exception {
        //用详细信息指定一个异常
        public NoParamsException(String message){
            super(message);
        }
    
        //用指定的详细信息和原因构造一个新的异常
        public NoParamsException(String message, Throwable cause){
            super(message,cause);
        }
    
        //用指定原因构造一个新的异常
        public NoParamsException(Throwable cause) {
            super(cause);
        }
    }

    二 自定义注解

    /**
     * 统一捕获service异常处理注解
     */
    @Documented
    @Target({ElementType.METHOD, ElementType.TYPE}) //可在类或者方法使用
    @Retention(RetentionPolicy.RUNTIME)
    public @interface ServiceExceptionCatch {
    }

    三 注解切面处理类

    @Component
    @Aspect
    @Slf4j
    public class ServiceExceptionHandler {
    
        @Around("@annotation(com.zhuzher.annotations.ServiceExcepCatch)  || @within(com.zhuzher.annotations.ServiceExcepCatch)")
        public ResponseMessage serviceExceptionHandler(ProceedingJoinPoint proceedingJoinPoint) {
            ResponseMessage returnMsg;
            try {
                returnMsg = (ResponseMessage) proceedingJoinPoint.proceed();
            } catch (Throwable throwable) {
                log.error("ServiceExcepHandler serviceExcepHandler failed", throwable);
                //单独处理缺少参数异常
                if(throwable instanceof NoParamsException) {
                    returnMsg = ResponseMessage.failture(ErrorCode.ARG_CAN_NOT_BE_EMPTY);
                }else{//其他正常返回
                    returnMsg=ResponseMessage.newErrorsMessage(throwable.getMessage());
                }
            }
            return returnMsg;
        }
    }

    四 使用

     即可捕获改异常,并自定义处理逻辑

  • 相关阅读:
    python2和python3的区别
    星球大战
    [USACO]高低卡(金)High Card Low Card (Gold)
    学习笔记
    叶子的染色
    大问题
    ...
    考试前...
    [HAOI2010]计数
    [POI2006]OKR-Periods of Words
  • 原文地址:https://www.cnblogs.com/houzheng/p/11953183.html
Copyright © 2011-2022 走看看