@Bean 方法中的 Http 头字段

Dom*_*nic 2 java spring spring-boot

我使用的是 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 ) {
    ....
    }

}
Run Code Online (Sandbox Code Playgroud)

Dea*_*ool 5

@RequestHeader注释仅在处理程序方法上受支持,来自此处的文档

public @interface RequestHeader
Run Code Online (Sandbox Code Playgroud)

指示方法参数应绑定到 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
}
Run Code Online (Sandbox Code Playgroud)

或者干脆你可以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")
     }

 }
Run Code Online (Sandbox Code Playgroud)