SpringBoot如何通过Feign调用传递Header中参数
作者:温柔的星空,让你感动 发布时间:2023-11-24 21:39:29
标签:SpringBoot,Feign,Header,参数
【SpringBoot】通过Feign调用传递Header中参数
如何通过Feign传递Header参数
问题描述
我们在SpringCloud中使用Feign请求另一个服务的Api接口时,有将Header中参数传递下去的需求,如果不做特殊处理,就会将Header中的参数丢失。
解决方案
方案一:通过 @RequestHeader(name = "headerName") 来传递
例如:Feign定义如下
@FeignClient(name = "service-name")
public interface XXXFeignClient {
@RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET)
String getUserTicket(@RequestParam("id") String id);
}
假设在服务service-name中的/user/getUserTicket接口需要从Header中取Referer数据,那么我们可以将上面代码进行改造:
@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);
}
然后在调用的时候将referer参数传递进去即可,如
public String getTicketById(@RequestParam("id") String id, HttpServletRequest request) {
String referer = request.getHeader("Referer");
return xxxFeignClient.getUserTicket(id, referer);
}
方案二:通过实现 RequestInterceptor 接口
首先,自定义实现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中,就可以实现该Feign中接口Header参数的传递
@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class)
public interface XXXFeignClient {
}
来源:https://www.cnblogs.com/cheng2839/p/14715057.html
0
投稿
猜你喜欢
- 这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。接下来
- [LeetCode] 131.Palindrome Partitioning 拆分回文串Given a string s, par
- 如下所示:JSONArray jsonArray1 = jsonObject.getJSONArray("result"
- 前言java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也不能做出来非常好用,
- 建库建表DROP DATABASE IF EXISTS mp;CREATE DATABASE mp DEFAULT CHARACTER SE
- 前言在java Thread类中,我们会看到interrupt()、interrupted()及isInterrupted(),在大多数情况
- 我的电脑环境win10vscode 1.36.1vscode安装插件安装完这个插件后会提示你安装 platformIOCore,按照提示安装
- 公司的svn的地址改变了,怎么办呢。自己本地的正在修改的项目怎么办呢?修改一下svn的服务器地址咯。1.就是先关闭ide,重新打开,然后选择
- 简要:EigenFace是基于PCA降维的人脸识别算法,PCA是使整体数据降维后的方差最大,没有考虑降维后类间的变化。 它是将图像
- 目录1.前言2.不同进制的特点3.进制之间的转换3.1 二进制转十进制:3.2 十进制转二进制:3.3 二进制转八进制:3.4 十六进制转二
- 平常我们工作中基本最多两级嵌套,但是有时候难免会遇到 * 嵌套的业务场景,笔者最近就碰到了,使用一般的嵌套发现赋值为空,这可难倒了菜逼的我,后
- 背景Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,
- 前言开篇一个例子,我看看都有谁会?如果不会的,或者不知道原理的,还是老老实实看完这篇文章吧。@Slf4j(topic = "c.V
- 问题描述:在用fabric集成后编译出现如下错误,Error:Cause: hostname in certificate didn'
- 一、什么是过滤器过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些敏感信息,发完以后有的会用*替代,还有就是登陆权限控制
- 右击有main方法的类===> Run as===> Run Configurations ===>双击java
- 前端采用layui框架,讲解多文件上传的完整实现功能。前端html重点代码如下:<div class="layui-form
- 什么是RecyclerView关于RecyclerView,是一个主要用于展示和回收View的有一个控件,在官用了一句话来概括Recycle
- SpringBootWeb开发回顾一下:springboot帮助我们配置了什么,能不能进行修改,能修改哪些,能否扩展?xxxAutoConf
- 前言 短时间提升自己最快的手段就是背面试题,最近总结了Java常用的面试题,分享给大家,希望大家都能圆梦大厂,加油,我命由我不由天