如何在 Spring 引导应用程序中使用 AOP 捕获 Http 动词和 api 端点

How to capture Http verb and api end point using AOP in Spring Boot application

我正计划实施一个方面,以便在我的 spring 启动应用程序中成功 return 后为给定的其余部分 API 捕获以下值:

  1. api 端点,例如 /api/ ...
  2. HTTP 动词。即 PUT/POST 等
  3. 请求负载和request/query参数

我是这样做的:

@Aspect
public class MyAspect {

  private final Logger log = LoggerFactory.getLogger(this.getClass());


  @Pointcut("within(com.web.rest.*)")
  public void applicationResourcePointcut() {
  }

  @AfterReturning(value = ("applicationResourcePointcut()"),
      returning = "returnValue")
  public void endpointAfterReturning(JoinPoint p, Object returnValue)  throws Throwable {
   
    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);
    System.out.println("REQUEST PAYLOAD = " + mapper.writeValueAsString(p.getArgs()));
    System.out.println("METHOD NAME = " + p.getSignature().getName());
    System.out.println("RESPONSE OBJECT = " + mapper.writeValueAsString(returnValue));   
   
     //CAN NOT UNDERSTAND HOW TO CAPTURE HTTP VERB AND ENDPOINT HERE 
  }

}

任何人都可以在这里帮助捕获 Http 动词和 api 端点吗?

您必须获取请求对象,并可以从中获取您需要的值

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
                    .getRequest();

并使用 HttpServletRequest

中可用的方法
request.getParameterMap()
request.getMethod()
request.getRequestURL()