从一个方面传递一个字符串到JointPoint。

问题描述 投票:0回答:1

我有一个方面,在所有的 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();
    }
}
spring spring-boot spring-aop
1个回答
1
投票

实现这个目的的一个方法是使用 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);
© www.soinside.com 2019 - 2024. All rights reserved.