java - 添加异步注释后,HttpServletRequest 中没有标头
问题描述
我有一个 Spring-MVC 控制器,它使用HttpServletRequest
和HttpServletResponse
in 方法:
@Controller
public class MyController {
@RequestMapping("/some/path")
public void handle(HttpServletRequest req, HttpServletResponse rsp) {
// some validation and preprocessing logic here, using request headers and URI
library.process(req, rsp);
}
}
req
并rsp
在此方法中被另一个库使用。此外,此方法使用请求 URI 和标头执行一些预处理逻辑和验证。
现在我们想通过添加@Async
注解使这个方法异步,因为库还提供了对请求进行异步处理的方法并且可以返回CompletableFuture<Void>
:
@EnableAsync
@Controller
public class MyController {
@RequestMapping("/some/path")
@Async
public CompletionStage<Void> handle(HttpServletRequest req, HttpServletResponse rsp) {
// validation and preprocessing
return this.library.process(req, rsp);
}
}
但问题是在使此控制器异步后,HttpServletRequest
返回空标头req.getHeaderNames()
(没有异步它为相同的 http 请求返回正确的标头)。可能是什么问题,以及如何从异步请求中正确获取请求标头?
解决方案
推荐阅读
- c++ - 在数组程序错误中查找回文字符串的数量
- mysql - mysql 错误您的 SQL 语法有错误
- java - 如何从 Java 调用 cplex .mod 和 .data
- spring-boot - Spring Security 忽略几个 url 几个 url 基本 auth 剩下所有 JWTTokenAuth
- python - 如何使用 Pipfile/Pipfile.lock pipenv 安装依赖项
- angular - Angular ViewChild valueChange 处理程序在组件被隐藏并由 *ngIf 重新显示后停止触发
- javascript - 我需要帮助获取字符串的前 n 个字符,直到数字字符开始
- java - 如何使用 java lambda 流:给定有书籍的学生列表,找到所有阅读最便宜书籍的学生
- html - HTML5原生拖放遏制?
- laravel - Blade Foreach 和 if 语句,第二次迭代为 9 == 2 返回 true