为了满足调用需求,需要在使用Resttemplate发送请求时,修改超时时长,网上给出了相关修改方法,代码如下:

HttpComponentsClientHttpRequestFactory rf =
((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
rf.setConnectTimeout(30000);
rf.setReadTimeout(30000);

但是在运行时报错,org.springframework.http.client.InterceptingClientHttpRequestFactory cannot be cast to org.springframework.http.client.HttpComponentsClientHttpRequestFactory

restTemplate.getRequestFactory()返回的类型无法转换,通过搜索和调试发现,在resttemplate中,必须在设置拦截器之前设置超时,因为在设置拦截器后无法设置超时,而我在设置中并没有设置过拦截器,应该是被默认构造了,所以解决方法如下:

restTemplate.setInterceptors(null);
HttpComponentsClientHttpRequestFactory rf =
((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
rf.setConnectTimeout(30000);
rf.setReadTimeout(30000);

在设置超时之前,先将拦截器置空,这样就不会出现无法设置的问题,之后验证通过。

查看resttemplate源码后发现,之所以会出现这样的情况是因为在resttemplate的源码中,有这么一段代码:

/**
* Return the request interceptor that this accessor uses.
*/
public List<ClientHttpRequestInterceptor> getInterceptors() {
return interceptors;
}
@Override
public ClientHttpRequestFactory getRequestFactory() {
ClientHttpRequestFactory delegate = super.getRequestFactory();
if (!CollectionUtils.isEmpty(getInterceptors())) {
return new InterceptingClientHttpRequestFactory(delegate, getInterceptors());
}
else {
return delegate;
}
}

可以看到,在getRequestFactory()函数中,本来应该是返回ClientHttpRequestFactory类型的,但是它会先校验一次是否含有interceptors拦截器,如果拦截器非空,则会返回包含拦截器的InterceptingClientHttpRequestFactory,这样是无法转换为HttpComponentsClientHttpRequestFactory类型的,因此在前面处理的时候将拦截器置空,这样就可以返回不含拦截器的所需对象。

Resttemplate中设置超时时长方法的更多相关文章

  1. asp中设置session过期时间方法总结

    http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载   asp中默认session过期时间 ...

  2. IDEA中设置注释模板的方法

    IDEA中设置注释模板主要分为两个部分,分别是创建java文件时类的注释和方法的注释. 这里为大家详细介绍一下方法,按MyEclipse的风格设置(MyEclipse的请看:MyEclipse中设置注 ...

  3. css网页中设置背景图片的方法详解

    在css代码中设置背景图片的方法,包括背景图片.背景重复.背景固定.背景定位等   用css设置网页中的背景图片,主要有如下几个属性: 1,背景颜色 {">说明:参数取值和颜色属性一样 ...

  4. 子div块中设置margin-top时影响父div块位置的解决办法

    在css中设置样式时,通常会遇到用子div块margin中设置margin-top时,父div块中就会随着子div的margin-top,也会和子div执行相同的margin-top的位置样式 解决办 ...

  5. Session中超时时长设置

    具体设置很简单,方法有三种:  (1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(600);参数600单位是秒,即在没有10分钟活动后,session将失 ...

  6. timeout超时时长优化和hystrix dashboard可视化分布式系统

    在生产环境中部署一个短路器,一开始需要将一些关键配置设置的大一些,比如timeout超时时长,线程池大小,或信号量容量 然后逐渐优化这些配置,直到在一个生产系统中运作良好 (1)一开始先不要设置tim ...

  7. Flask Response响应(flask中设置响应信息的方法,返回json数据的方法)

    设置响应信息的方法 1.  返回自定义的响应头,有两种方式: (1)  第一种是:视图函数return的时候,使用元组,返回自定义的信息 返回的时候的状态码可以自定义信息:"状态码   自定 ...

  8. js获取html5 audio 音频时长方法

    <audio src="我的好兄弟.mp3" controls="controls"  id="audio" style=" ...

  9. Android中设置全屏的方法

    在实际的应用程序开发中,我们有时需要把 Activity 设置成全屏显示,一般情况下,可以通过两种方式来设置全屏显示效果.其一,通过在代码中可以设置,其二,通过manifest配置文件来设置全屏. 其 ...

随机推荐

  1. oracle密码过期的修改

    ALTER USER 用户名 IDENTIFIED BY 密码 ;

  2. How to create your iOS team provisioning profile ?

    From Apple Developer: https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppS ...

  3. 深入理解synchronized方法同步的是方法还是对象?

    一.运用synchronized关键字 首先我们来看看一个多线程中线程不安全的列子 代码如下: 共享数据类: public class NotSynchronizated extends Thread ...

  4. Python:从入门到实践--第十章--文件和异常--练习

    #.python学习笔记:在文本编辑器中新创建一个文件,写几句话老总结你至此学到的python知识 #其中‘In Python you can’ 打头.将这个文件命名为learning_python. ...

  5. win 10 kms 激活 后 火狐 上 https 网站 报错

    原因: 系统导入了未知的根证书 影响:?? 解决方法: http://mozilla.com.cn/thread-374897-1-1.html

  6. ios-项目启动页面

    项目运行启动页面: 点工程项目targets-(或Images.xcasets)-LaunchImage(iphone四种规格图片:320*480/350*568/640*960/640*1136)将 ...

  7. Python开发 標準內建方法 (未完代補)

    abs(number)  絕對值  The abs() method takes a single argument: num - number whose absolute value is to ...

  8. linux服务器架设--学习笔记

    PS: Centos是属于红帽子的操作系统

  9. PythonStudy——内存管理之垃圾回收 Memory management Garbage collection

    内存管理 引用计数:垃圾回收机制的依据 # 1.变量的值被引用,该值的引用计数 +1# 2.变量的值被解绑,该值的引用计数 -1# 3.引用计数为0时就会被垃圾回收机制回收 标记清除:解决循环引用问题 ...

  10. java_oop_关键字

    空白符注释 标识符分隔符操作符字面量关键字 instanceof java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出, ...