当@Around存在时@ControllerAdvice不工作

时间:2018-06-05 14:22:16

标签: spring spring-boot spring-aop

我正在使用带有AOP的Spring Boot 1.5.6。对于异常处理,我使用带有@ExceptionHandler的@ControllerAdvice,并记录方法入口/出口和调用时间,我正在使用AOP的@Around。但是当我故意抛出RuntimeException后调用REST URL时,ExceptionHandler没有被执行。如果我用@Before替换@Around那么它工作正常。任何建议......

更新:我已经从@Around代码块中重新抛出了Exception,现在一切正常了。但是推荐吗?

1 个答案:

答案 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");
    }
}