调用feign接口手动设置请求头
- 一 需求场景:
- 二 解决方法
- 2.1 feign接口添加@RequestHeader的注解
- 2.2 provider正常从请求头获取参数
- 2. 3 consumer手动传参
- 2.4 测试
一 需求场景:
我们在provider服务有些参数是从请求头中获取的,但是consumer服务在调用feign接口时,本身接口请求头中并没有provider需要的的参数;此时想手动的将一些参数设置到feign接口!
二 解决方法
2.1 feign接口添加@RequestHeader的注解
该方式是在方法执行前,先获取需要的参数,后将取出来的值作为参数传递到待执行的方法中。
该方法所调用的Feign接口需要做一个改造,在参数中添加带有@RequestHeader的注解,该注解表示将变量放在请求头,而不是请求的参数或者请求体里面。
2.2 provider正常从请求头获取参数
@GetMapping("getName")
public Void getMerchantCompareInfo(@RequestParam(value = "name") String name,HttpServletRequest request) {
String token = request.getHeader("token");
String token2 = request.getHeader("X-TOKEN");
System.out.println("token = " + token);
System.out.println("X-TOKEN = " + token2);
return null;
}
2. 3 consumer手动传参
@GetMapping("getName")
public Void getMerchantCompareInfo() {
feignParamApi.getMerchantCompareInfo("name","12344");
return null;
}
2.4 测试
如果我们在@RequestHeader指定了请求头参数名称,那么取的时候也需要使用对应的名称
参考链接
Feign请求头设置/传递问题(同步方法设置Header/异步方法设置Header)