文档章节

Spring RestTemplate Interceptor 配置

OrangeJoke
 OrangeJoke
发布于 2016/10/09 11:13
字数 297
阅读 292
收藏 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
粉丝 37
博文 46
码字总数 31659
作品 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
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
Spring Cloud:服务消费(Ribbon)【Dalston版】

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

zhaochaochao
09/14
0
0
白话SpringCloud | 第四章:服务消费者(Ribbon+Feign)

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

oKong
09/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring只

一、IOC(Inversion of Control)或者依赖注入(Dependency Injection) 1、底层实现原理:反射 2、三大核心接口: BeanFactory:简单容器系列,只是实现了容器最基本的功能。 ApplicationC...

狠一点
2分钟前
0
0
缓存架构SpringBoot集成Curator实现zookeeper分布式锁

一、分布式锁简介 1、什么是锁 在单机环境下,当存在多个线程可以同时改变某个共享变量时,就需要同步来实现该功能,使其线程安全。 而同步就是通过锁来实现的。锁保证了同一时刻只有一个线程...

架构师springboot
4分钟前
0
0
11《Java核心技术》之Java提供了哪些IO方式? NIO如何实现多路复用?

一、提出问题 IO 一直是软件开发中的核心部分之一,伴随着海量数据增长和分布式系统的发展,IO 扩展能力愈发重要。幸运的是,Java 平台 IO 机制经过不断完善,虽然在某些方面仍有不足,但已经...

飞鱼说编程
11分钟前
0
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

linuxprobe16
11分钟前
0
0
55:Mysql用户管理|常用sql语句|mysql数据库备份恢复

1、Mysql用户管理; 场景,为了安全,新建的站点,创建新的用户,或者给已有用户授权,对某个库或者某个表有权限; 语法: grant all on *.* to 'user'@'127.0.0.1' identified by 'password'; g...

芬野de博客
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部