使用自定义注解和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;
    }
}

四 使用

使用自定义注解和SpringAOP捕获Service层异常,并处理自定义异常_第1张图片
即可捕获该异常,并自定义处理逻辑

原文地址:https://www.cnblogs.com/houzheng/p/11953183.html

你可能感兴趣的:(JavaWeb,JavaWeb)