在控制器中,我可以使用以下代码访问所有@RequestHeader
@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
}
}
如何将标头注入一个不控制器的Spring服务bean?否则我需要在整个地方传递这个hashmap。
我知道我可以注入HttpServletRequest
然后获取标题,但如果它可以直接注入会更容易。
答案 0 :(得分:2)
您缺少的是HttpServletRequest是一个来自您的Web应用程序的请求的实例。它不是一个可以在其他类中注入的全局bean。它是每个请求的新实例。 您的标题也是如此,它们仅在请求的上下文中有效。您无法在任何地方全局注入它们。 在你的控制器中,它们被传递给你的控制器方法,并且我记得它们在你的非控制器实例中是不可用的。
还有其他类型的处理程序,例如ExceptionHandler和Controller通知,您可以在方法中访问请求,但不能在任意类上访问。它必须在请求的上下文中。