我想提取传入请求的URI。
我的应用程序中包含以下代码-@RequestMapping
的{{1}}。我想通过@Async
提取路径URI,但是当存在request.getRequestURI()
批注时,它将返回null
,否则,则返回所需的输出。这是否是预期的行为,如果是,为什么?又如何使用@Async
获得相同的输出?对于我来说,删除@Async
并不是一个容易的选择,因为我想使用它来提高性能。
@Async
通常,所有与请求相关的参数都丢失了,这不是我想要的;我需要为程序提取它们。
答案 0 :(得分:0)
我能找到关于空HttpServletRequest
的原因的最接近线索是对此帖子的答案发表评论:What is a life of HttpServletRequest object?
要解决您的问题,您可以在此处尝试2种方法:
由于您的方法是void
,因此您可以使用例如CompletableFuture从incomingRequest
方法手动启动新线程。
或者,尝试从您的方法中返回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);
}