我正在使用带有AOP的Spring Boot 1.5.6。对于异常处理,我使用带有@ExceptionHandler的@ControllerAdvice,并记录方法入口/出口和调用时间,我正在使用AOP的@Around。但是当我故意抛出RuntimeException后调用REST URL时,ExceptionHandler没有被执行。如果我用@Before替换@Around那么它工作正常。任何建议......
更新:我已经从@Around代码块中重新抛出了Exception,现在一切正常了。但是推荐吗?
答案 0 :(得分:1)
@Around
方面包裹了整个方法。如果你不在该方法中抛出异常,则会消耗异常,因此异常处理程序不会启动。
这意味着您不应该在您的方面捕获任何异常。如果您尝试记录方法的持续时间,则应在finally
块中执行此操作:
@Around("execution(* com.xyz.example.MyController.*(..))")
public void aroundCalls(ProceedingJoinPoint joinPoint) throws Throwable {
logger.info("Before call");
try {
// This will throw "Throwable", so you'll have to add it to your method
joinPoint.proceed();
} finally {
logger.info("After call");
}
}