我有一个方面,在所有的 Controller
类。我的方面会产生一个 UUID
我想在我的控制器中得到这个ID,这样我就可以把它传给我的服务层并进一步处理。我不知道如何将 UUID
从一个方面到另一个方面 Controller
以下是方面
@Configuration
@Aspect
public class ApplicationAspect {
@Before("execution(* com.spike.aop.arun.*Controller.*(..))")
public void aspectForAllControllers() {
System.out.println("Correlation ID generated");
var correlationId = generateCorrelationId(); // need to pass this to controller
}
private String generateCorrelationId() {
return UUID.randomUUID().toString();
}
}
实现这个目的的一个方法是使用 RequestContextHolder
并设置生成的 UUID
作为请求属性。
以下代码演示了同样的操作
@Before("execution(* com.spike.aop.arun.*Controller.*(..))")
public void aspectForAllControllers() {
System.out.println("Correlation ID generated");
String correlationId = generateCorrelationId();
RequestContextHolder.getRequestAttributes().setAttribute("UUID", correlationId, RequestAttributes.SCOPE_REQUEST);
}
并访问控制器中的请求属性。
@GetMapping("/testUUID")
public void testUUID(HttpServletRequest request) {
System.out.println("From Controller :"+request.getAttribute("UUID"));
}
或
RequestContextHolder.getRequestAttributes().getAttribute("UUID",RequestAttributes.SCOPE_REQUEST);