'Determine which controller class is called in springboot
I have multiple urls and need to identify which controller class is called.
Edit: All controller classes implements interface and interface method implementation in class will return something.
Basically I need to create a function which will accept url and interface method implementation will return custom data.
Solution 1:[1]
You can meet your need by creating an Aspect class, then you will known which controller is called. see example below
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import org.springframework.stereotype.Component;
@Slf4j
@Aspect
@Component
public class LoggerAdvice {
@Pointcut("within(@org.springframework.web.bind.annotation.RestController *)")
public void controllerPointCut() {}
@Around("controllerPointCut()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("Enter: {}.{}() with argument[s] = {}", joinPoint.getSignature().getDeclaringTypeName(),
joinPoint.getSignature().getName(),
try {
return joinPoint.proceed();
} catch (IllegalArgumentException e) {
log.error("Illegal argument: {} in {}.{}()", Arrays.toString(joinPoint.getArgs()),
joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
throw e;
}
}
}
You have to add this dependency to your project.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
To enable Aspect you have to add @EnableAspectJAutoProxy in your configuration class (annotated @Configuration).
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
