spring-android RestTemplate 的一个不错的功能是根据操作系统的版本使用适当的(由 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);
}
}
}