首页 > 编程知识 正文

拦截feign接口返回结果,feign拦截器

时间:2023-05-05 08:32:12 阅读:176173 作者:1264

摘要Feign支持请求断路器在提交请求之前,会对提交的模板进行操作,包括设置请求标头等属性。

使用feign进行服务间调用时,如何修改请求的标头和编码信息是通过实现RequestInterceptor接口的apply方法,feign在发送请求之前将该接口的apply

请求自定义阻止程序实现feign.RequestInterceptor接口; 实现方法apply(requesttemplatetemplate; 设置header属性: template.header(name,values ); 设置param属性: template.query(name,values ); 拦截器示例import feign.RequestInterceptor; import feign.RequestTemplate; importorg.spring framework.web.context.request.request attributes; importorg.spring framework.web.context.request.requestcontextholder; importorg.spring framework.web.context.request.servletrequestattributes; import javax.servlet.http.http servlet request; import java.util.Enumeration; import java.util.HashMap; import java.util.Map;/* * @ authorcreatedbyxiaoxianon 2021/1/27.* @ versionv0.1.0* @ see font color=' # 0000 ff ' house-parent/font publicclassfeignconfigurationimplementsrequestinterceptor { @ overridepublicvoidapply (requesttemplaterequestttemplate ) ) { requestattributesrequestattributes=requestcontextholder.getrequest attributes (; 请求属性(if )!=null () httpservletrequestrequest=((servletrequestattributes ) requestattributes ).getRequest ); 请求!=null () header属性设置: requesttemplate.header(name,values ); enumerationstringheadernames=request.get header names (; 标题!=null () while (headernames.hasmoreelements ) ) string name=headernames.nextelement; string values=request.get header (name; requesttemplate.header(name,values ); }//param属性设置: requesttemplate.query(name,values ); enumerationstringparamnames=request.getparameter names (; 参数名称!=null () { Map map=new HashMap; while (param names.hasmoreelements ((string name=param names.nextelement ) ); string values=request.getparameter (name; requesttemplate.query(name,values ); } } }实现了requestinterceptor接口的拦截器requestinterceptor接口定义了参数为RequestTemplate的apply方法,抽象类为bassest template

还有几个实现类: BasicAuthRequestInterceptor、feignacceptgzipencodinginterceptor和feigncontentgzipencodinginterceptor。

bsicauthrequestinterceptorbasicauthrequestinterceptor实现requestinterceptor接口,其apply方法在RequestTemplate中添加Authorization

baserequestinterceptorbaserequestinterceptor定义addHeader方法,并将不重复的header添加到requestTemplate中

fignacceptgzipencodinginterceptorfeignacceptgzipencodinginterceptor继承BaseRequestInterceptor,其apply方法在RequestTemplate中应用

figncontentgzipencodinginterceptorfeigncontentgzipencodinginterceptor继承BaseRequestInterceptor,其apply方法首先需要compression mimeType是否满足要求,content大小是否超过阈值,如果需要compress,添加名为Content-Encoding的gzip,deflate header

RequestInterceptor界面概述定义了参数为RequestTemplate的apply方法。 有一个名为BaseRequestInterceptor的抽象类。其他几个实现类分别是BasicAuthRequestInterceptor、feignacceptgzipencodinginterceptor、 figncontentgzipencodinginterceptorbasicauthrequestinterceptor, 实现了一个requestinterceptor接口,用于将名为Authorization的apply方法添加到RequestTemplate中。fignacceptgzipencodinginterceptor是baserequestion 其apply方法在RequestTemplate中将Accept-Encoding值设置为gzip, 添加到deflate的figncontentgzipencodinginterceptor继承BaseRequestInterceptor,其应用方法是首先考虑是否需要compression、 也就是说,判断mimeType是否满足要求和content大小是否超过阈值,如果需要compress,则为名为Content-Encoding的gzip,deflate的header参考feign

spring boot ——’feign的拦截器请求拦截器

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。