HttpServletRequest 在 Aspect 中使用时抛出错误

问题描述

我有一个方法,它有一个方面。当我尝试@Autowire HttpServletRequest 并使用 request.getHeader(something) 时,出现此错误 -

未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能在 dispatcherServlet 之外运行:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前请求。

我该如何解决这个问题?我尝试使用 RequestContextHolder,但在调试时我仍然看到 null。当我的项目没有 web.xml 时,如何使用 RequestContextListener。

解决方法

可以通过以下方式使用 HttpServletRequest 访问请求头。

private static HttpServletRequest getRequest() {
    return((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
}

public static String getApiTraceId() {
    return getRequest().getHeader(something);
}