gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:24:20 28 4
gpt4 key购买 nike

我想提取传入请求的 URI。

我的应用程序中有以下代码 - @RequestMapping,它是 @Async。我想通过 request.getRequestURI() 提取路径 URI,但是当存在 @Async 注释时它返回 null,否则,当不是,输出是所需的。这是预期的行为吗?如果是,为什么?以及如何使用 @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
}

似乎一般情况下,所有请求相关的参数都在丢失,这不是我想要的;我需要为我的程序提取它们。

最佳答案

我能找到的最接近空 HttpServletRequest 原因的线索是对这篇文章的答案的评论:What is a life of HttpServletRequest object?

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

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

关于java - HttpServletRequest 详细信息使用 @Async Spring 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634963/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com