HttpServletRequest详细信息使用@Async Spring返回null

时间:2019-02-11 16:29:36

标签: java spring spring-boot tomcat servlets

我想提取传入请求的URI。

我的应用程序中包含以下代码-@RequestMapping的{​​{1}}。我想通过@Async提取路径URI,但是当存在request.getRequestURI()批注时,它将返回null,否则,则返回所需的输出。这是否是预期的行为,如果是,为什么?又如何使用@Async获得相同的输出?对于我来说,删除@Async并不是一个容易的选择,因为我想使用它来提高性能。

@Async

通常,所有与请求相关的参数都丢失了,这不是我想要的;我需要为程序提取它们。

1 个答案:

答案 0 :(得分:0)

我能找到关于空HttpServletRequest的原因的最接近线索是对此帖子的答案发表评论:What is a life of HttpServletRequest object?

要解决您的问题,您可以在此处尝试2种方法:

  1. 由于您的方法是void,因此您可以使用例如CompletableFutureincomingRequest方法手动启动新线程。

  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);
}