RestTemplate – 默认超时值

使用Spring的RestTemplate时,默认超时值是多少?

例如,我正在调用这样的Web服务:

RestTemplate restTemplate = new RestTemplate(); String response = restTemplate.getForObject("http://webservice.com/item/3455", String.class); 

RestTemplate是否有内置的超时值? 我不打算更改超时值,但是,我想确保每个请求都有合理的超时。

谢谢。

我认为您可以使用SimpleClientHttpRequestFactory作为超时参数。 可以通过构造函数或setter方法将SimpleClientHttpRequestFactory的实例设置为rest模板。

默认情况下,RestTemplate使用SimpleClientHttpRequestFactory,因此您可以直接将值设置为restTemplate。

spring-android RestTemplate的一个很好的function是使用适当的(由Google推荐)RequestFactory实现,具体取决于操作系统的版本。

Google建议在Gingerbread(版本2.3)及更新版本上使用J2SE工具,而以前的版本应使用HttpComponents HttpClient。 根据此建议,RestTemplate会检查运行您的应用程序的Android版本,并使用相应的ClientHttpRequestFactory。

所以之前的答案并不完整,因为没有考虑HttpComponentsClientHttpRequestFactory(由spring-android用于Android OS版本<2.3)。

我的解决方案是这样的:

 public class MyRestTemplate extends RestTemplate { public MyRestTemplate() { if (getRequestFactory() instanceof SimpleClientHttpRequestFactory) { Log.d("HTTP", "HttpUrlConnection is used"); ((SimpleClientHttpRequestFactory) getRequestFactory()).setConnectTimeout(10 * 1000); ((SimpleClientHttpRequestFactory) getRequestFactory()).setReadTimeout(10 * 1000); } else if (getRequestFactory() instanceof HttpComponentsClientHttpRequestFactory) { Log.d("HTTP", "HttpClient is used"); ((HttpComponentsClientHttpRequestFactory) getRequestFactory()).setReadTimeout(10 * 1000); ((HttpComponentsClientHttpRequestFactory) getRequestFactory()).setConnectTimeout(10 * 1000); } } } 

要明确回答这个问题……

默认超时是无限的。

默认情况下,RestTemplate使用SimpleClientHttpRequestFactory,然后使用HttpURLConnection。

默认情况下,HttpURLConnection的超时为0 – 即无限,除非它已由这些属性设置:

 -Dsun.net.client.defaultConnectTimeout=TimeoutInMiliSec -Dsun.net.client.defaultReadTimeout=TimeoutInMiliSec