我使用的是Spring Boot 2.0.5版本。我有一个@Bean
方法来创建请求范围Bean,但是要创建实例,我需要访问为其创建实例的请求的HTTP标头字段。 @RequestHeader
注释在我的@RestController
中工作正常,但在我的@Bean
方法中工作不正常。有谁知道如何在这种情况下访问该信息?
下面是我想做的一个示例,但是由于@RequestHeader
注释在该比赛中不起作用,因此无法使用。
谢谢您的提示。
最诚挚的问候,多米尼克
@Configuration
public class AProducer {
@Bean
@Scope(value="request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public User produceUser( @RequestHeader(value="Accept") String acceptType ) {
....
}
}
答案 0 :(得分:4)
@RequestHeader
批注
public @interface RequestHeader
注释,指示方法参数应绑定到Web请求标头。 在Spring MVC和Spring WebFlux中支持带注释的处理程序方法。
如果方法参数是Map,MultiValueMap或HttpHeaders,则将使用所有标头名称和值填充映射。
因此,在Controller
类的Web请求处理程序方法中获取Header值,并将其通过方法参数传递给produceUser
示例:这是Controller Class
中用@Controller
或@RestController
注释的方法
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive) {
//call the `produceUser(String reqParam)` method by autowiring `AProducer` class
}
或者简单地,您可以尝试private @Autowired HttpServletRequest request;
类中的AProducer
并按照@JB Nizet的建议获取标题;
@Configuration
public class AProducer {
private @Autowired HttpServletRequest request
@Bean
@Scope(value="request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public User produceUser( @RequestHeader(value="Accept") String acceptType ) {
.... //String value =request.getHeader("Accept")
}
}