微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用feign服务调用添加Header参数

这篇文章主要介绍了使用feign服务调用添加Header参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

feign添加Header参数

@Configuration public class FeignConfiguration implements RequestInterceptor { private static final Logger logger = LoggerFactory.getLogger(FeignConfiguration.class); @Override public void apply(RequestTemplate template) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if(null != attributes) { HttpServletRequest request = attributes.getRequest(); String token = request.getHeader("token"); template.header("token", token); } logger.info("feign interceptor header:{}",template); } }

Feign设置Header头部,@Headers无效

在使用FeignClient调用外部接口的时候,需要在请求头部添加header的参数,用于请求的认证。在查找Feign文档中提供了@Headers注解,该注解可以完成头部的添加。但是却没有生效

@FeignClient(name="name",url = "127.0.0.1:8090/test",path = "/") public interface IUserService { @RequestMapping(value = "getUserPage",method = RequestMethod.POST) @Headers(value={"ContentType=application/x-www-form-urlencoded","Inner_token=PXH0dP5I8qQ8UbFPpzm67cQkm7j8tWT2Kwn6J6SXYkfp2kMo/lSqHQ=="}) public Map getUserPage(User user); }

在服务端获取不到Inner_token的头部参数。得到的结果是null

于是开启feign的日志

第一步:定义feign的日志配置文件

@Configuration public class FeignConfig { @Bean Logger.Level feignLevel(){ return Logger.Level.FULL; } }

第二步:在调用的FeignClien客户端注解上指定该日志级别配置文件

@FeignClient(name="name",url = "127.0.0.1:8090/test",path = "/",configuration = FeignConfig.class) public interface IUserService { @RequestMapping(value = "getUserPage",method = RequestMethod.POST) @Headers(value={"ContentType=application/x-www-form-urlencoded","Inner_token=PXH0dP5I8qQ8UbFPpzm67cQkm7j8tWT2Kwn6J6SXYkfp2kMo/lSqHQ=="}) public Map getUserPage(User user); }

第三步:配置yml文件,指定该feignclient的配置路径和日志级别

logging: level: demo.IUserService: debug

重启,并发起请求

2019-09-27 10:46:01.662 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] ---> POST http://127.0.0.1:8090/test/getUserPage HTTP/1.1

2019-09-27 10:46:01.663 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] Content-Type: application/json;charset=UTF-8

2019-09-27 10:46:01.663 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] Content-Length: 53

2019-09-27 10:46:01.663 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage]

2019-09-27 10:46:01.663 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] {"id":0,"tableName":"feignTable","page":10,"size":10}

2019-09-27 10:46:01.663 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] ---> END HTTP (53-byte body)

2019-09-27 10:46:01.684 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] 2019-09-27 10:46:01.684 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] content-type: application/json;charset=UTF-8

2019-09-27 10:46:01.685 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] date: Fri, 27 Sep 2019 02:46:01 GMT

2019-09-27 10:46:01.685 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] transfer-encoding: chunked

2019-09-27 10:46:01.685 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] x-application-context: HelloServer:8090

2019-09-27 10:46:01.685 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage]

2019-09-27 10:46:01.689 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage] {"success":true,"rows":[{"id":10111,"tableName":"hbaseTable","page":1,"size":20},{"id":10112,"tableName":"hbaseTable","page":1,"size":20},{"id":10113,"tableName":"hbaseTable","page":1,"size":20},{"id":10114,"tableName":"hbaseTable","page":1,"size":20},{"id":10115,"tableName":"hbaseTable","page":1,"size":20},{"id":10116,"tableName":"hbaseTable","page":1,"size":20},{"id":10117,"tableName":"hbaseTable","page":1,"size":20},{"id":10118,"tableName":"hbaseTable","page":1,"size":20},{"id":10119,"tableName":"hbaseTable","page":1,"size":20},{"id":10120,"tableName":"hbaseTable","page":1,"size":20}]}

2019-09-27 10:46:01.689 DEBUG 15200 --- [ hystrix-name-1] demo.IUserService : [IUserService#getUserPage]

在日志中发现,header中没有被加上我之前设置的参数。说明该注解没有生效

于是debug调试

通过debug我发现feign会先将请求参数构建成Request对象,request信息如下:

从图中可看到,该Request实例的headers属性为空,而Request又是根据RequestTemplate模板对象生成的,RequestTemplate实例信息如下:

上一篇:Java实现获取某年某月第一天/最后一天的方法下一篇:Java泛型与数据库应用实例详解

热门搜索

Header参数 

参数调用 

服务调用 

header()函数使用说明 

feign调用原理 

相关文章

使用feign服务调用添加Header参数

2021-09-10阅读(3757)评论(0)推荐()

这篇文章主要介绍了使用feign服务调用添加Header参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringCloud Feign 服务调用的实现

2021-10-10阅读(5161)评论(0)推荐()

Feign是一个声明性web服务客户端。本文记录多个服务之间使用Feign调用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

解决微服务feign调用添加token的问题

2021-12-03阅读(9558)评论(0)推荐()

这篇文章主要介绍了解决微服务feign调用添加token的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Feign调用服务各种坑的处理方案

2021-10-18阅读(5942)评论(0)推荐()

这篇文章主要介绍了Feign调用服务各种坑的处理方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Spring boot2X Consul如何使用Feign实现服务调用

2021-10-19阅读(7139)评论(0)推荐()

这篇文章主要介绍了spring boot2X Consul如何使用Feign实现服务调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

SpringBoot使用Feign调用其他服务接口

2021-10-11阅读(6388)评论(0)推荐()

这篇文章主要介绍了SpringBoot使用Feign调用其他服务接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

SpringCloud实战之Feign声明式服务调用

2021-10-12阅读(8057)评论(0)推荐()

这篇文章主要介绍了SpringCloud实战之Feign声明式服务调用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

取消

有人回复邮件通知

提交评论

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐