首页 > 解决方案 > 添加异步注释后,HttpServletRequest 中没有标头

问题描述

我有一个 Spring-MVC 控制器,它使用HttpServletRequestHttpServletResponsein 方法:

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

reqrsp在此方法中被另一个库使用。此外,此方法使用请求 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 请求返回正确的标头)。可能是什么问题,以及如何从异步请求中正确获取请求标头?

标签: javaspring-boothttpspring-mvcservlets

解决方案


推荐阅读