Spring 将字符串从一个方面传递到连接点
我有一个方面,它为所有控制器类中的每个方法执行。我的方面生成了一个UUID,我想在我的控制器中获得这个ID,以便将它传递给我的服务层和进一步的进程。我不确定如何将UUID从一个方面传递到控制器 以下是方面 @配置 @面貌 公共类应用程序方面{ @执行前*com.spike.aop.arun.*控制器。*。。 公共无效aspectForAllControllers{ 生成System.out.printlnCorrelation ID; var correlationId=generateCorrelationId;//需要将其传递给控制器 } 私有字符串generateCorrelationId{ 返回UUID.randomuid.toString; } }Spring 将字符串从一个方面传递到连接点,spring,spring-boot,spring-aop,Spring,Spring Boot,Spring Aop,我有一个方面,它为所有控制器类中的每个方法执行。我的方面生成了一个UUID,我想在我的控制器中获得这个ID,以便将它传递给我的服务层和进一步的进程。我不确定如何将UUID从一个方面传递到控制器 以下是方面 @配置 @面貌 公共类应用程序方面{ @执行前*com.spike.aop.arun.*控制器。*。。 公共无效aspectForAllControllers{ 生成System.out.printlnCorrelation ID; var correlationId=generateCorr
实现这一点的一种方法是使用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"));
}
或
您是否可以创建header对象,将这个新的uuid值放入header中,并在Controller中作为正常值接收它这是一个spring boot APII,仅在spring boot的上下文中建议:facepalm:试试这个:@Aspectpercflowexecution*com.spike.aop.arun.*Controller.*.可爱。。这正是我想要的。。非常感谢你
RequestContextHolder.getRequestAttributes().getAttribute("UUID",RequestAttributes.SCOPE_REQUEST);