为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2022-06-15 09:24:23
我想提取传入请求的 URI。我的应用程序中有以下代码 -@RequestMapping即@Async. 我想通过提取路径URI,request.getRequestURI()但是null当@Async注释存在时它会返回,否则,当它不存在时,输出是所需的。这是预期的行为,如果是,为什么?我怎样才能获得相同的输出@Async?删除@Async对我来说不是一个简单的选择,因为我想用它来提高性能。@Async@RequestMapping("{name}/**")@ResponseBodypublic void incomingRequest(        @PathVariable("name") String name,        HttpMethod method,        HttpServletRequest request,        HttpServletResponse response){    String URI = request.getRequestURI(); // <-- null with @Async}似乎总的来说,所有与请求相关的参数都在丢失,这不是我想要的;我需要为我的程序提取它们。
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

我能找到的最接近空原因的线索HttpServletRequest是对这篇文章的答案的评论:HttpServletRequest 对象的生命是什么?

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

  1. 由于您的方法是您可以使用例如CompletableFuturevoid从方法手动启动一个新线程。incomingRequest

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

}


查看完整回答
反对 回复 2022-06-15
  • 1 回答
  • 0 关注
  • 391 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信