您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“自定義注解和springAOP捕獲Service層異常并處理自定義異常的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“自定義注解和springAOP捕獲Service層異常并處理自定義異常的示例分析”這篇文章吧。
/** * 自定義參數(shù)為null異常 */ public class NoParamsException extends Exception { //用詳細(xì)信息指定一個(gè)異常 public NoParamsException(String message){ super(message); } //用指定的詳細(xì)信息和原因構(gòu)造一個(gè)新的異常 public NoParamsException(String message, Throwable cause){ super(message,cause); } //用指定原因構(gòu)造一個(gè)新的異常 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); //單獨(dú)處理缺少參數(shù)異常 if(throwable instanceof NoParamsException) { returnMsg = ResponseMessage.failture(ErrorCode.ARG_CAN_NOT_BE_EMPTY); }else{//其他正常返回 returnMsg=ResponseMessage.newErrorsMessage(throwable.getMessage()); } } return returnMsg; } }
即可捕獲改異常,并自定義處理邏輯!
新增注解,實(shí)現(xiàn)類和方法層級的異常捕獲
package com.ahdruid.aop.annotation; import java.lang.annotation.*; /** * 服務(wù)異常捕獲,如捕獲Service向外拋出的異常 * <p> * 添加在類上、方法上 * */ @Documented @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface ServiceExcepCatch { }
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; /** * 服務(wù)異常捕獲處理器 * <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; } }
使用時(shí),在類或者方法上加上注解@ServiceExcepCatch
以上是“自定義注解和springAOP捕獲Service層異常并處理自定義異常的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。