最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作

 更新時間:2021年06月07日 11:27:39   作者:侯賽雷  
這篇文章主要介紹了自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一 自定義異常

/**
 * 自定義參數(shù)為null異常
 */
public class NoParamsException extends Exception {
    //用詳細信息指定一個異常
    public NoParamsException(String message){
        super(message);
    }

    //用指定的詳細信息和原因構(gòu)造一個新的異常
    public NoParamsException(String message, Throwable cause){
        super(message,cause);
    }

    //用指定原因構(gòu)造一個新的異常
    public NoParamsException(Throwable cause) {
        super(cause);
    }
}

二 自定義注解

/**
 * 統(tǒng)一捕獲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);
            //單獨處理缺少參數(shù)異常
            if(throwable instanceof NoParamsException) {
                returnMsg = ResponseMessage.failture(ErrorCode.ARG_CAN_NOT_BE_EMPTY);
            }else{//其他正常返回
                returnMsg=ResponseMessage.newErrorsMessage(throwable.getMessage());
            }
        }
        return returnMsg;
    }
}

即可捕獲改異常,并自定義處理邏輯!

捕獲Service層異常,統(tǒng)一處理

新增注解,實現(xiàn)類和方法層級的異常捕獲

package com.ahdruid.aop.annotation;
import java.lang.annotation.*;
 
/**
 * 服務異常捕獲,如捕獲Service向外拋出的異常
 * <p>
 * 添加在類上、方法上
 *
 */
@Documented
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ServiceExcepCatch {
}

異常處理handler

package com.ahdruid.aop;
import com.ahdruid.ReturnMsg;
import com.ahdruid.errorenums.BaseErrorEnum;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
 
/**
 * 服務異常捕獲處理器
 * <p>
 * 如捕獲Service向外拋出的異常
 *
 */
@Component
@Aspect
@Slf4j
public class ServiceExcepHandler {
 
    @Around("@annotation(com.ahdruid.aop.annotation.ServiceExcepCatch)  || @within(com.ahdruid.aop.annotation.ServiceExcepCatch)")
    public ReturnMsg serviceExcepHandler(ProceedingJoinPoint proceedingJoinPoint) {
        ReturnMsg returnMsg = new ReturnMsg();
        try {
            returnMsg = (ReturnMsg) proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            log.error("ServiceExcepHandler serviceExcepHandler failed", throwable);
            returnMsg.setError(BaseErrorEnum.SYS_ERROR_UNKNOW);
        }
        return returnMsg;
    }
}

使用時,在類或者方法上加上注解@ServiceExcepCatch

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

江安县| 青州市| 开封市| 宜宾县| 连南| 前郭尔| 中方县| 镶黄旗| 丰宁| 高邮市| 靖西县| 秀山| 兰溪市| 车险| 汪清县| 平邑县| 东源县| 天津市| 曲水县| 澜沧| 喀喇沁旗| 林甸县| 加查县| 横山县| 琼结县| 杨浦区| 二连浩特市| 镶黄旗| 长沙县| 济南市| 临汾市| 白沙| 高淳县| 琼结县| 翁牛特旗| 察雅县| 敦煌市| 东安县| 宁南县| 二连浩特市| 东光县|