java - @Bean 方法中的 Http Header 字段
问题描述
我正在使用 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 ) {
....
}
}
解决方案
@RequestHeader
注释仅在处理程序方法上受支持,来自此处的文档
public @interface RequestHeader
指示方法参数应绑定到 Web 请求标头的注释。支持 Spring MVC 和 Spring WebFlux 中的带注释的处理程序方法。
如果方法参数是 Map、MultiValueMap 或 HttpHeaders,则使用所有标题名称和值填充映射。
因此,在类中获取 Web 请求处理程序方法中的 Header 值,Controller
并将其通过方法参数传递给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")
}
}
推荐阅读
- css - CSS 不寻常的使用 :after
- javascript - 使用 Typescript 和 Vue 时如何从 .js 文件中导入函数
- reactjs - 在循环中从另一个函数反应调用函数
- python - python matplotlib pyplot show 安装 vnc 后失败?
- maya - Maya:将 HIK rig 顶部的 FBX 动画与命名空间合并
- r - 从 R 中 dplyr 的过滤器函数计算百分比
- javascript - 在 JavaScript 中使用异步回调调用递归函数
- javascript - 如何将数据从 HTML 保存到 MongoDB?collection() 不是函数错误
- spring-boot - 如何在客户端中存储属性以便在与 Spring Config Server 断开连接时重新启动
- javascript - 使用 sine-ease-in-out 分布在多个步骤中划分范围