首页 > 其他分享 >feigni请求添加拦截器

feigni请求添加拦截器

时间:2024-03-18 10:44:36浏览次数:18  
标签:拦截器 url header 添加 template feigni bodyBytes RequestInterceptor

@FeignClient 的 configuration 属性:

Feign 注解 @FeignClient 的 configuration 属性,可以对 feign 的请求进行配置。

包括配置Feign的Encoder、Decoder、 Interceptor 等。

feign 请求添加拦截器,也可以通过这个 configuration 属性 来指定。

feign 请求拦截器 RequestInterceptor

feign 的拦截器,需要实现 RequestInterceptor 接口,重写 apply() 方法。

apply() 方法参数为 RequestTemplate。

RequestTemplate 获取 url :

    //url 的路径为 被调用的服务路径,比如 b-service/user/info
    String url = requestTemplate.url();

RequestTemplate 获取body 参数

    byte[] bodyBytes = requestTemplate.body();
    if (bodyBytes != null) {
    	JSONObject bodyJson = (JSONObject) JSON.toJSON(bodyBytes);
    }

增加 header 参数:

	requestTemplate.header("xxx", "kkk");

示例:

  • FeignInterceptorConfigDemo 配置类:
@Configuration
public class FeignInterceptorConfigDemo {

    /**
     * feign 拦截器
     * @return
     */
    @Bean
    public RequestInterceptor requestInterceptor() {
        return new MyRequestInterceptor();
    }

    /**
     * 实现拦截器RequestInterceptor
     */
    static class MyRequestInterceptor implements RequestInterceptor {
        @Override
        public void apply(RequestTemplate template) {
            //示例:添加 header
            template.header("Content-Type", "application/json;charset=utf-8");
            //url 的路径为 被调用的服务路径,比如 b-service/user/info
            String url = template.url();

            //示例:获取body 参数
            byte[] bodyBytes = template.body();
            if (bodyBytes != null) {
                JSONObject bodyJson = (JSONObject) JSON.toJSON(bodyBytes);
                System.out.println("body参数:" + bodyJson);
            }

            //示例:针对特殊的 url 进行处理
            if (url.contains("verifyResult")) {
                //处理逻辑。比如增加 header 参数、 针对特定属性进行拦截等等。
                template.header("userIdTest", "abcde");

            }

        }



    }

}

  • FeignClient 注解 指定 拦截器配置:

在 configuration 属性中,指定配置为 以上设置的 FeignInterceptorConfigDemo 即可添加拦截器。

@FeignClient(name = "myService", configuration = FeignInterceptorConfigDemo.class)
@RequestMapping("/myService")
public interface MyFeignService {

}

标签:拦截器,url,header,添加,template,feigni,bodyBytes,RequestInterceptor
From: https://www.cnblogs.com/expiator/p/18079849

相关文章

  • dev CheckedListBoxControl 名称前添加图标
    1、先在工程中添加ImageCollection控件:imageCollection12、绑定控件    chklistNames.HtmlImages=imageCollection1;3、chklistNames中的CheckedListBoxControl中AllowHtmlDraw属性设为truechklistNames.AllowHtmlDraw=Default.Boolean.True;4、图标转......
  • devexpress gridview列宽度自适应、添加行号列并自适应宽度
    1、列宽自适应gv.OptionsView.ColumnAutoWidth=false;gv.OptionsView.BestFitMode=GridBestFitMode.Fast;gv.BestFitColumns();for(inti=0;i<gv.columns.count;i++){gv.columns[i].BestFit();} 2、添加行号并自适应gv.TopRowChanged+=gv_TopRowChanged; pri......
  • SpringBoot拦截器
    目录拦截器概念拦截器的作用应用场景SpringBoot中的拦截器实现实现HandlerInterceptor接口注册拦截器到InterceptorRegistry配置拦截器的拦截规则拦截器的执行顺序和生命周期拦截器的执行顺序拦截器的生命周期多个拦截器的执行流程拦截器的性能优化和常见问题拦截器的常见问题和解......
  • 【WPF】自定义按钮样式(添加依赖属性、圆角)
    参考https://www.bilibili.com/video/BV13D4y1u7XX/?p=21代码示例1、自定义CustomButton按钮继承ButtonnamespaceWpfStudy.Buttons{publicclassCustomButton:Button{publicCornerRadiusCornerRadius{get{return(CornerRa......
  • 滴水逆向笔记系列-PE总结2-25.FileBuffer-ImageBuffer-26.代码节空白区添加代码-27.新
    第二十五课FileBuffer-ImageBuffer1.PE文件执行的总过程第二十三课已经说过了,文件先复制一份读入虚拟内存中(FileBuffer),接着要运行时将FileBuffer中的文件数据拉伸,重载到4GB的虚拟内存中(ImageBuffer)但ImageBuffer还不是文件运行时在内存的真正状态,ImageBuffer还没表示文件已......
  • Qt QtCharts给QChartView换肤,换背景色添加背景图片
    换色setBackgroundBrush这种接口可以设置QChartView背景色首先,给QChart类去掉背景渲染:换肤1QChart*chart=newQChart();2chart->setTheme(QChart::ChartThemeLight);这里chart是你自检的chart进入枚举一共有多个,可以自己看下,那个更适合。换背景下面展示一些内联......
  • 【若依前后端分离+app】app页面首页添加动态轮播图
    首页文件路径:pages/work/index.vue1. Vue组件的模板部分包括创建模板、视图容器、视图、轮播图组件以及相关的属性和事件监听器。以下部分为轮播图代码:<template><viewclass="work-container"><view><!--轮播图--><uni-swiper-dotclass="uni-s......
  • setup factory添加注册表
       result=SessionVar.Get("%AppFolder%");proversion=SessionVar.Get("%ProductVer%");Registry.CreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\*******\\***")Registry.SetValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\*******\\......
  • 拦截器和过滤器(原理&区别)
    目录一、拦截器拦截器是什么拦截器的使用拦截器的实现导入依赖实现HandlerInterceptor接口注册拦截器拦截器的生命周期拦截器的执行顺序拦截器的生命周期多个拦截器的执行流程拦截器的实际使用拦截器实现日志记录实现接口幂等性校验拦截器的性能优化二、过滤器......
  • 基于SCIP的约束处理器Conshdlr添加惰性约束——以TSP问题为例
    文章目录1.TSP案例引入2.考虑惰性约束的求解效率对比2.1求解基础TSP模型2.2基于SCIP的Conshdlr添加惰性约束1.TSP案例引入在运筹学建模和求解过程中,“lazyconstraints”(惰性约束)是一种动态添加约束的策略,松弛部分约束后求解得到的“可行解”,不断地进......