SpringBoot如何通過(guò)Feign調(diào)用傳遞Header中參數(shù)
【SpringBoot】通過(guò)Feign調(diào)用傳遞Header中參數(shù)
如何通過(guò)Feign傳遞Header參數(shù)
問(wèn)題描述
我們?cè)赟pringCloud中使用Feign請(qǐng)求另一個(gè)服務(wù)的Api接口時(shí),有將Header中參數(shù)傳遞下去的需求,如果不做特殊處理,就會(huì)將Header中的參數(shù)丟失。
解決方案
方案一:通過(guò) @RequestHeader(name = "headerName") 來(lái)傳遞
例如:Feign定義如下
@FeignClient(name = "service-name")
public interface XXXFeignClient {
@RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET)
String getUserTicket(@RequestParam("id") String id);
}假設(shè)在服務(wù)service-name中的/user/getUserTicket接口需要從Header中取Referer數(shù)據(jù),那么我們可以將上面代碼進(jìn)行改造:
@FeignClient(name = "service-name")
public interface XXXFeignClient {
@RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET)
String getUserTicket(@RequestParam("id") String id, @RequestHeader(name = "Referer") String referer);
}然后在調(diào)用的時(shí)候?qū)eferer參數(shù)傳遞進(jìn)去即可,如
public String getTicketById(@RequestParam("id") String id, HttpServletRequest request) {
String referer = request.getHeader("Referer");
return xxxFeignClient.getUserTicket(id, referer);
}方案二:通過(guò)實(shí)現(xiàn) RequestInterceptor 接口
首先,自定義實(shí)現(xiàn)RequestInterceptor接口的apply方法,如下
import org.springframework.stereotype.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Configuration
public class FeignConfiguration implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
requestTemplate.header(name, values);
}
}
}
}然后將自定義的配置類配置到Feign中,就可以實(shí)現(xiàn)該Feign中接口Header參數(shù)的傳遞
@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class)
public interface XXXFeignClient {
}到此這篇關(guān)于SpringBoot 通過(guò)Feign調(diào)用傳遞Header中參數(shù)的文章就介紹到這了,更多相關(guān)SpringBoot Feign調(diào)用傳遞Header參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
模擬Spring的簡(jiǎn)單實(shí)現(xiàn)
本文的主要內(nèi)容就是學(xué)習(xí)Spring的開(kāi)端,模擬一下Spring的實(shí)現(xiàn),感興趣的小伙伴可以參考一下2015-10-10
Java中常用緩存Cache機(jī)制的實(shí)現(xiàn)
這篇文章主要介紹了Java中常用緩存Cache機(jī)制的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
ChatGPT-4.0未來(lái)已來(lái) 你來(lái)不來(lái)
最近聽(tīng)說(shuō)了一個(gè)非?;鸬募夹g(shù)ChatGPT4.0,今天這篇文章就給大家介紹一下ChatGPT究竟是什么東東,不得不說(shuō)ChatGPT是真的強(qiáng),下面就讓我們一起了解究竟什么是ChatGPT吧2023-03-03
Mybatis映射文件之常用標(biāo)簽及特殊字符的處理方法
這篇文章主要介紹了Mybatis映射文件常用標(biāo)簽及特殊字符的處理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
springboot?aop里的@Pointcut()的配置方式
這篇文章主要介紹了springboot?aop里的@Pointcut()的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
java 中newInstance()方法和new關(guān)鍵字的區(qū)別
這篇文章主要介紹了java 中newInstance()方法和new關(guān)鍵字的區(qū)別的相關(guān)資料,希望通過(guò)本文大家能掌握他們之家的區(qū)別與用法,需要的朋友可以參考下2017-09-09
深入理解Java中沒(méi)那么簡(jiǎn)單的單例模式
這篇文章主要給大家詳細(xì)介紹了Java單例模式,關(guān)于Java中的單例模式并非看起來(lái)那么簡(jiǎn)單的,為什么要這么說(shuō)呢?下面通過(guò)這篇文章來(lái)一起看看吧,有需要的朋友們可以參考借鑒。2017-01-01
java 動(dòng)態(tài)生成SQL的實(shí)例講解
下面小編就為大家?guī)?lái)一篇java 動(dòng)態(tài)生成SQL的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
如何在Spring?Boot框架中使用攔截器實(shí)現(xiàn)URL限制
在Spring?Boot框架中,您可以使用攔截器(Interceptor)來(lái)控制限制URL列表,本文通過(guò)一個(gè)簡(jiǎn)單的示例給大家介紹Spring?Boot?攔截器實(shí)現(xiàn)URL限制的操作方法,感興趣的朋友跟隨小編一起看看吧2023-08-08

