文档章节

Spring RestTemplate Interceptor 配置

OrangeJoke
 OrangeJoke
发布于 2016/10/09 11:13
字数 297
阅读 258
收藏 0

自定义自己的interceptor


public class ScClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
     @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution         execution) throws IOException {
                //重写实现方法
            }
}

配置httpclient (用于发送请求),并为restTemplate注入interceptor

   @Bean
    @ConditionalOnProperty(value = "com.social.credits.infra.fiber.enabled", matchIfMissing = true)
    public HttpClient httpClient() {
        return FiberHttpClientBuilder.
                create(httpIoThread). // use io threads
                setMaxConnPerRoute(httpConnPerRoute).
                setMaxConnTotal(httpConnMax).build();
    }

    /**
     * set restTemplate http client
     * 构造使用Apache的httpclient
     * if use restTemplate.getInterceptors().add(new ScClientHttpRequestInterceptor()); may get null from result
     */
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient());
        factory.setConnectionRequestTimeout(connectionRequestTimeout);
        factory.setReadTimeout(readTimeout);
        // 构造加入interceptor
        List<ClientHttpRequestInterceptor> interceptorList = new ArrayList<>();
        interceptorList.add(new ScClientHttpRequestInterceptor());  //自己实现的interceptor

        InterceptingClientHttpRequestFactory interceptorFactory = new InterceptingClientHttpRequestFactory(new BufferingClientHttpRequestFactory(factory), interceptorList);
        restTemplate.setRequestFactory(interceptorFactory);
        return restTemplate;
    }

总结

在为RestTemplate注入interceptor的时候要选择 InterceptingClientHttpRequestFactory interceptorFactory = new InterceptingClientHttpRequestFactory(new BufferingClientHttpRequestFactory(factory), interceptorList); 这个构造函数,不然会导致restTemplate getbody return null error

参考链接:

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/ClientHttpRequestInterceptor.html

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/BufferingClientHttpRequestFactory.html (getbody return null!!)

http://stackoverflow.com/questions/33372859/spring-resttemplate-bufferingclienthttprequestfactory-simpleclienthttpreques

http://springinpractice.com/2013/11/01/how-to-pretty-print-your-json-with-spring-and-jackson/ http://www.ibm.com/developerworks/library/j-tracemt/index.html

© 著作权归作者所有

共有 人打赏支持
OrangeJoke
粉丝 35
博文 42
码字总数 27125
作品 0
江北
高级程序员
疯狂Spring Cloud连载(9)——RestTemplate的负载均衡原理

本文节选自《疯狂Spring Cloud微服务架构实战》 京东购买地址:https://item.jd.com/12256011.html 当当网购买地址:http://product.dangdang.com/25201393.html Spring Cloud教学视频:htt...

杨大仙的程序空间
2017/10/18
0
2
Spring Cloud ZooKeeper集成Feign的坑1,错误:Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration.

错误如下: ERROR 31473 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***APPLICATION FAILED TO START*** Description: Field restTemplate in org.springframework.cloud.zookee......

easonjim
2017/09/20
0
0
【java程序员理解HTTP】【6】实践--java 中几种模拟 http 请求的方式

几种方式或说方案 Jdk本身提供 java.net 包的 HttpURLConnection Apache提供HttpClient Spring Web提供RestTemplate 以上都可以在java代码中模拟实现http请求,是随着技术的进步出来的,总体...

karma123
08/15
0
0
聊聊spring cloud的LoadBalancerAutoConfiguration

序 本文主要研究一下spring cloud的LoadBalancerAutoConfiguration RibbonAutoConfiguration spring-cloud-netflix-ribbon-2.0.0.RC2-sources.jar!/org/springframework/cloud/netflix/ribb......

go4it
07/16
0
0
Spring Boot实践--RestTemplate使用

spring web 项目提供的RestTemplate,使java访问url更方便,更优雅。 它是spring提供的异步的客户端http访问的核心class,它提供非常简单的RESTful方式与http server端进行数据交互,根据所提...

spinachgit
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
38分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
41分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
46分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
55分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
57分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部