0

有没有办法从 Spring 请求处理程序方法的调用堆栈中的方法获取有关 HTTP 请求的信息?

换句话说,鉴于我有一个处理程序方法,例如:

@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
  MyInternalClass.doSomeAction();
  return String.format("Hello %s!", name);
}

我正在寻找在类中的doSomeAction()静态方法的代码中获取有关 HTTP 请求的信息(例如 URL、标MyInternalClass头等)的方法。

约束是我不能修改原始方法(hello())。

4

1 回答 1

1

您可以添加类型的请求参数HttpServletRequest

@GetMapping("/hello")
public String hello(
   @RequestParam(value = "name", defaultValue = "World") String name,
   HttpServletRequest originalRequest) {
  // HERE: call another method here
  return String.format("Hello %s!", name);
}

查看Spring 参考文档,“方法参数”一章


第2部分

但是,我一直在寻找一种不会强迫开发人员更改代码的方法。我将尝试在我的问题中添加一个示例,因此它会更加冗长。

您可以使用RequestContextHolder获取请求属性。

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

RequestContextHolder.getRequestAttributes()是一个静态方法,可以从任何地方调用(即使对于不是 Spring Bean 的类)。但它需要从由 HTTP 请求触发的线程调用。

于 2021-08-22T17:43:45.757 回答