自定义注解和springAOP捕获Service层异常,并处理自定义异常操作
更新时间:2021年06月07日 11:27:39 作者:侯赛雷
这篇文章主要介绍了自定义注解和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;
}
}

即可捕获改异常,并自定义处理逻辑!
捕获Service层异常,统一处理
新增注解,实现类和方法层级的异常捕获
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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型)
这篇文章主要介绍了Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
SpringCloud OpenFeign与Ribbon客户端配置详解
在springcloud中,openfeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级的支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用2022-11-11
java 中createStatement()方法的实例详解
这篇文章主要介绍了java 中createStatement()方法的实例详解的相关资料,需要的朋友可以参考下2017-06-06
实现一个基于Servlet的hello world程序详解步骤
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层2022-02-02
关于SpringSecurity配置403权限访问页面的完整代码
本文给大家分享SpringSecurity配置403权限访问页面的完整代码,配置之前和配置之后的详细介绍,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2021-06-06


最新评论