Java 如何使用spring将http请求头注入到服务bean中

Java 如何使用spring将http请求头注入到服务bean中,java,dependency-injection,spring-rest,Java,Dependency Injection,Spring Rest,在控制器中,我可以使用以下代码访问所有的@RequestHeaders @RestController public class MyController { @RequestMapping(value = "/mypath", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity moveEnrollment(@RequestHeader Map<S

在控制器中,我可以使用以下代码访问所有的
@RequestHeader
s

@RestController
public class MyController {
@RequestMapping(value = "/mypath", method = RequestMethod.GET, produces =   MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity moveEnrollment(@RequestHeader Map<String, String> headers) {
    ..invoke business logic
}
}
@RestController
公共类MyController{
@RequestMapping(value=“/mypath”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u value)
public ResponseEntity moveEnrollment(@RequestHeader映射头){
…调用业务逻辑
}
}
如何将头部注入到不是控制器的Spring服务bean中?否则我需要把这个散列图到处传


我知道我可以注入
HttpServletRequest
,然后获取标题,但如果可以直接注入,就更容易了。

您缺少的是,HttpServletRequest是一个来自web应用程序的请求的实例。它不是可以注入到其他类中的全局bean。每一个请求都是一个新实例。 标题也是如此,它们仅在请求上下文中有效。你不能在任何地方全局注入它们。 在控制器中,它们被传递给控制器方法,据我所知,它们在非控制器实例中不可用


还有其他类型的处理程序,如ExceptionHandler和Controller advice,您可以访问方法中的请求,但不能访问任意类。它必须在请求的上下文中。

您缺少的是HttpServletRequest是一个到您的web应用程序的请求的实例。它不是可以注入到其他类中的全局bean。每一个请求都是一个新实例。 标题也是如此,它们仅在请求上下文中有效。你不能在任何地方全局注入它们。 在控制器中,它们被传递给控制器方法,据我所知,它们在非控制器实例中不可用


还有其他类型的处理程序,如ExceptionHandler和Controller advice,您可以访问方法中的请求,但不能访问任意类。它必须在请求的上下文中。

您实际上可以在任何地方注入HttpServletRequest。如果调用线程是http请求的一部分,那么它实际上就是该请求实例。但如果线程不是请求线程,则为null。我理解您的意思,但我认为Abe要求的是将其注入到服务中,而不是方法中。我解释说请求不是全局bean,而是每个请求。@AminJ您可以将httpservletrequest对象注入到spring服务bean中。我想这是用线程本地人完成的。因此,即使每个请求的httprequest对象都是新的,bean也会被正确地注入到该线程中。问题是我是否也可以对请求头执行同样的操作。实际上,您可以在任何地方注入HttpServletRequest。如果调用线程是http请求的一部分,那么它实际上就是该请求实例。但如果线程不是请求线程,则为null。我理解您的意思,但我认为Abe要求的是将其注入到服务中,而不是方法中。我解释说请求不是全局bean,而是每个请求。@AminJ您可以将httpservletrequest对象注入到spring服务bean中。我想这是用线程本地人完成的。因此,即使每个请求的httprequest对象都是新的,bean也会被正确地注入到该线程中。问题是我是否也可以对请求头执行同样的操作。