在Aop中抛出自定义的异常失败,直接抛出了500,自定义的异常信息message没有。
这种情况下,请检查自定义异常的继承方式,在Aop中只能抛出的异常必须继承RunTimeException或其子类;
接下来,让我们通过一个简单的demo验证下:
Exception的测试:
代码:
@Around("cut()")
public Object FilterUser(ProceedingJoinPoint joinPoint)throws Throwable {
Object result;
Object[] args = joinPoint.getArgs();
//访问目标方法的参数:
if (args != null && args.length > 1) {
String userId = String.valueOf(args[1]);
if (StringUtils.isEmpty(userId)) {
return "未登录";
}
if (!list.contains(userId)) {
throw new Exception("dd");
}
}
//服务调用执行
result = joinPoint.proceed(args);
return result;
}
Excepton异常的返回,直接500了。
{
"timestamp": 1575189707971,
"status": 500,
"error": "Internal Server Error",
"exception": "java.lang.reflect.UndeclaredThrowableException",
"message": "No message available",
"path": "/zqm/annotation/testAop"
}
RunTimeException测试:
@Around("cut()")
public Object FilterUser(ProceedingJoinPoint joinPoint)throws Throwable {
Object result;
Object[] args = joinPoint.getArgs();
//访问目标方法的参数:
if (args != null && args.length > 1) {
String userId = String.valueOf(args[1]);
if (StringUtils.isEmpty(userId)) {
return "未登录";
}
if (!list.contains(userId)) {
throw new RuntimeException("dd");
}
}
//服务调用执行
result = joinPoint.proceed(args);
return result;
}
结果:果然抛出自定义的异常信息
{
"timestamp": 1575190143677,
"status": 500,
"error": "Internal Server Error",
"exception": "java.lang.RuntimeException",
"message": "dd",
"path": "/zqm/annotation/testAop"
}