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

我想提取传入请求的 URI。


我的应用程序中有以下代码 -@RequestMapping即@Async. 我想通过提取路径URI,request.getRequestURI()但是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

}

似乎总的来说,所有与请求相关的参数都在丢失,这不是我想要的;我需要为我的程序提取它们。


有只小跳蛙
浏览 392回答 1
1回答

qq_笑_17

我能找到的最接近空原因的线索HttpServletRequest是对这篇文章的答案的评论:HttpServletRequest 对象的生命是什么?要解决您的问题,您可以在此处尝试 2 种方法:由于您的方法是您可以使用例如CompletableFuturevoid从方法手动启动一个新线程。incomingRequest或者,尝试CompletableFuture从您的方法返回,如下所示:@Async@RequestMapping("{name}/**")@ResponseBodypublic CompletableFuture<Void> incomingRequest(&nbsp; &nbsp; &nbsp; &nbsp; @PathVariable("name") String name,&nbsp; &nbsp; &nbsp; &nbsp; HttpMethod method,&nbsp; &nbsp; &nbsp; &nbsp; HttpServletRequest request,&nbsp; &nbsp; &nbsp; &nbsp; HttpServletResponse response){&nbsp; &nbsp; String URI = request.getRequestURI(); // should get the right non null path&nbsp; &nbsp; return CompletableFuture.completedFuture(null);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java