我们在调用feign的情况下,经常需要用到客户端所持有的header比如说auth-token,我们需要将这些header传递下去
使用拦截器,在客户端拦截feign的请求,并把所需要的header传递下去
代码:
一定不能把所有的header都往下传,这样很可能会导致在调用feign的时候,请求类型混乱,应该需要哪些header就穿哪些header
今天尝试用feign去调用其他部门提供的一个http接口,该接口要求在请求中设置一个urname头部,用于身份鉴权。
代码写好好,尝试去进行访问
异常堆栈信息如下:
at feign.feignexception.errorstatus(feignexception.java:62)
at feign.codec.errordecoder$default.decode(errordecoder.java:91)
at feign.synchronousmethodhandler.executeanddecode(synchronousmethodhandler.java:134)
at feign.synchronousmethodhandler.invoke(synchronousm四级报名费多少ethodhandler.java:76)
at feign.reflectivefeign$feigninvocationhandler.invoke(reflectivefeign.java:103)
at com.sun.proxy.$proxy147.listtopics(unknown source)
at com.yidian.data.exptmgr.controller.kafkacontroller.getkafkatopics(kafkacontroller.java:35)
// 省略更多异常堆栈信息
于是我尝试通过debug来找到问题的根源,通过debug我发现feign会先将请求参数构建成request对象,request信息如下:
request
从图中可看到,该request实例的headers属性为空,而request又是根据requesttemplate模板对象生成的,requesttemplate实例信息如下:
requesttemplate
到这里可以看出,问题是出在requesttemplate的构建构成中,于是我就去跟踪requesttemplate构建的代码,发现requesttemplate是根据methodmetadata构建而成,而methodmetadata就是对方法配置的抽象。
从上述代码可以看到,head站长培训er的设置是由metadata的headermapindex 属性决定的,那么,设置headermapindex的位置,必然就和h情感话语eader的解析相关,于是通过查看方法引用
从代码中我们可以清晰的看到,解析过程中是从@requestmapping或其派生注解的header属性中解析header的,并且header的key和value需要用“=”进行分割。
于是我修改成交流电直流电下面的形式,
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-06 01:17:47,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/7c1a1bca679f837b31f9cb8f3c571c03.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:FeignClient如何共享Header及踩坑过程记录.doc
本文 PDF 下载地址:FeignClient如何共享Header及踩坑过程记录.pdf
留言与评论(共有 0 条评论) |