文档章节

Spring RestTemplate Interceptor 配置

OrangeJoke
 OrangeJoke
发布于 2016/10/09 11:13
字数 297
阅读 317
收藏 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
博文 47
码字总数 32623
作品 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 RestTemplate 实践

什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。 调用RestTemplate的默认构...

单红宇
2016/03/18
0
0
白话SpringCloud | 第四章:服务消费者(Ribbon+Feign)

前言 上两章节,介绍了下关于注册中心-Eureka的使用及高可用的配置示例,本章节开始,来介绍下服务和服务之间如何进行服务调用的,同时会讲解下几种不同方式的服务调用。 一点知识 在体系中,...

oKong
09/21
0
0
Spring Cloud:服务消费(Ribbon)【Dalston版】

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问...

zhaochaochao
09/14
0
0
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

没有更多内容

加载失败,请刷新页面

加载更多

Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
17分钟前
0
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
29分钟前
1
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
31分钟前
2
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
今天
5
0

中国龙-扬科
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部