SpringBoot如何通过Feign调用传递Header中参数

作者:温柔的星空,让你感动 时间:2023-11-24 21:39:29 

【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

标签:SpringBoot,Feign,Header,参数
0
投稿

猜你喜欢

  • Android自定义view系列之99.99%实现QQ侧滑删除效果实例代码详解

    2022-05-08 15:35:55
  • SpringBoot Knife4j在线API文档框架基本使用

    2022-03-10 21:27:48
  • Springboot Websocket Stomp 消息订阅推送

    2022-05-08 14:39:30
  • 深入了解C#设计模式之订阅发布模式

    2021-08-14 05:31:39
  • java寻找迷宫路径的简单实现示例

    2021-07-06 13:17:50
  • SpringBoot零基础入门之基本操作与概念

    2023-10-25 00:41:36
  • 深入浅析Mybatis的缺陷问题

    2023-07-19 19:39:46
  • Android so的热升级尝试

    2023-08-07 22:41:59
  • java 学习笔记(入门篇)_多选择结构switch语句

    2023-02-04 11:35:59
  • Java实现导入导出Excel文件的方法(poi,jxl)

    2021-09-13 21:12:35
  • android短信管理器SmsManager实例详解

    2021-09-03 18:17:18
  • C# 语言入门基础介绍

    2022-03-02 13:32:33
  • C#中用foreach语句遍历数组及将数组作为参数的用法

    2022-03-14 16:25:12
  • Kotlin实用语法糖空安全类型转换及相等性判断

    2021-09-03 20:23:49
  • Android EditText追加空格、限制字符等方法示例

    2023-10-02 17:10:47
  • Java中ReentrantLock4种常见的坑

    2021-09-26 10:51:46
  • C语言中数据是如何存储在内存中的

    2021-07-03 02:13:34
  • Java二维数组计算集合总结

    2023-02-15 16:38:14
  • Android编程实现自动检测版本及自动升级的方法

    2023-06-07 16:24:23
  • java简单列出文件夹下所有文件的方法

    2022-12-23 19:25:05
  • asp之家 软件编程 m.aspxhome.com