Has*_*ain 28 spring spring-cloud spring-cloud-netflix
是否可以将动态值设置为标题?
@FeignClient(name="Simple-Gateway")
interface GatewayClient {
@Headers("X-Auth-Token: {token}")
@RequestMapping(method = RequestMethod.GET, value = "/gateway/test")
String getSessionId(@Param("token") String token);
}
Run Code Online (Sandbox Code Playgroud)
注册RequestInterceptor的实现会添加标头,但无法动态设置标头值
@Bean
public RequestInterceptor requestInterceptor() {
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate template) {
template.header("X-Auth-Token", "some_token");
}
};
}
Run Code Online (Sandbox Code Playgroud)
我在github上发现了以下问题,其中一个评论者(lpborges)试图在@RequestMapping注释中使用标题做类似的事情.
https://github.com/spring-cloud/spring-cloud-netflix/issues/288
亲切的问候
Has*_*ain 51
解决方案是使用@RequestHeader注释而不是假设特定注释
@FeignClient(name="Simple-Gateway")
interface GatewayClient {
@RequestMapping(method = RequestMethod.GET, value = "/gateway/test")
String getSessionId(@RequestHeader("X-Auth-Token") String token);
}
Run Code Online (Sandbox Code Playgroud)
Car*_*der 15
@RequestHeader 对我不起作用。有效的是:
@Headers("X-Auth-Token: {access_token}")
@RequestLine("GET /orders/{id}")
Order get(@Param("id") String id, @Param("access_token") String accessToken);
Run Code Online (Sandbox Code Playgroud)
vij*_*jay 12
@HeaderMap、@Header 和 @Param 对我不起作用,下面是使用 FeignClient 传递多个标头参数时使用 @RequestHeader 的解决方案
@PostMapping("/api/channelUpdate")
EmployeeDTO updateRecord(
@RequestHeader Map<String, String> headerMap,
@RequestBody RequestDTO request);
Run Code Online (Sandbox Code Playgroud)
调用代理的代码如下:
Map<String, String> headers = new HashMap<>();
headers.put("channelID", "NET");
headers.put("msgUID", "1234567889");
ResponseDTO response = proxy.updateRecord(headers,requestDTO.getTxnRequest());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45721 次 |
| 最近记录: |