HttpServletRequest的细节返回null与@Async春天

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

我想提取传入请求的URI。

我在我的应用程序下面的代码 - 一个@RequestMapping这是@Async。我想提取经由request.getRequestURI()路径URI但当null注释存在则返回@Async,否则,当它不是时,输出是任意的。这是预期的行为,如果是的话,为什么呢?我怎样才能获得与@Async相同的输出?删除@Async不适合我,因为我想用它来表现一个容易的选择。

@Async
@RequestMapping("{name}/**")
@ResponseBody
public void incomingRequest(
        @PathVariable("name") String name,
        HttpMethod method,
        HttpServletRequest request,
        HttpServletResponse response)
{
    String URI = request.getRequestURI(); // <-- null with @Async
}

看来,在一般情况下,所有的请求有关的数据被丢失,这是不是我想要的;我需要提取他们对我的计划。

java spring spring-boot tomcat servlets
1个回答
0
投票

最近的线索空HttpServletRequest的原因,我能找到的这个帖子上的答案评论:What is a life of HttpServletRequest object?

为了解决您的问题,您可以在这里尝试2点的方法:

  1. 因为你的方法是void可以使用,例如,incomingRequest手动启动从CompletableFuture方法一个新的线程。
  2. 或者,尝试从你的方法返回CompletableFuture,就像这样:
@Async
@RequestMapping("{name}/**")
@ResponseBody
public CompletableFuture<Void> incomingRequest(
        @PathVariable("name") String name,
        HttpMethod method,
        HttpServletRequest request,
        HttpServletResponse response)
{
    String URI = request.getRequestURI(); // should get the right non null path
    return CompletableFuture.completedFuture(null);
}
© www.soinside.com 2019 - 2024. All rights reserved.