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)
@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)
| 归档时间: |
|
| 查看次数: |
2024 次 |
| 最近记录: |