@ControllerAdvice не работает, когда присутствует @Around - PullRequest
0 голосов
/ 05 июня 2018

Я использую Spring Boot 1.5.6 с AOP.Для обработки исключений я использую @ControllerAdvice с @ExceptionHandler, а для регистрации времени входа / выхода метода и вызова я использую @Around AOP.Но когда я вызываю REST URL после преднамеренного выброса RuntimeException, ExceptionHandler не выполняется.Если я заменю @Around на @Before, то он будет работать нормально. Любые предложения ...

ОБНОВЛЕНИЕ: я перебросил исключение из блока кода @Around, и теперь все работает нормально.Но рекомендуется ли это?

1 Ответ

0 голосов
/ 05 июня 2018

Аспект @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");
    }
}
...