Search code examples
javaspringspring-bootspring-aopspring-restcontroller

when @Around is used for Spring AOP then data is not retrieved


I am spring AOP and i have @Around like below

@Around(value = "execution(* com.spring.rest.controller.Controller.*(..))")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
    long start = System.currentTimeMillis();
    joinPoint.proceed();
    long taken = System.currentTimeMillis() - start;
    logger.info("around this {} time taken is {}", joinPoint, taken);
} 

In my Rest controller, I have getmapping and when I call that routing in the browser there is no data retrieved.

From the logs, I found that it was returning null(below log info) -- @Around is executed and it took 20seconds, @AfterReturning is executed with returning null

2020-05-07 00:41:03.083  INFO 366372 --- [nio-8080-exec-1] lication$$EnhancerBySpringCGLIB$$21c1be2 : around this execution(List com.spring.rest.controller.Controller.getm()) time taken is 20
2020-05-07 00:41:03.084  INFO 366372 --- [nio-8080-exec-1] lication$$EnhancerBySpringCGLIB$$21c1be2 : returning execution(List com.spring.rest.controller.Controller.getm()) returned with value null

but when I remove the @Around, API is working perfectly.

can I know what could be the reason and how to solve this issue?


Solution

  • You need to return the object.

    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object object = joinPoint.proceed();
        long taken = System.currentTimeMillis() - start;
        logger.info("around this {} time taken is {}", joinPoint, taken);
        return object;
    }