1

在使用 Spring 的 RestTemplate 时,我需要使用 HttpClient 来设置某些参数。

我目前通过以下方式执行此操作:

HttpClient httpClient = new HttpClient();
httpClient.getParams().setSoTimeout(prefs.getServerTimeout());
httpClient.getParams().setConnectionManagerTimeout(3000);
httpClient.getParams().setContentCharset("UTF-8");
httpClient.getParams().setCredentialCharset("ISO-8859-1", )
...
CommonsClientHttpRequestFactory requestFactory = new CommonsClientHttpRequestFactory(httpClient);
requestFactory.setReadTimeout(prefs.getServerTimeout());

RestTemplate restTemplate = new RestTemplate(requestFactory);

目前到处都在使用的 HttpClient,例如在

HttpComponentsClientHttpRequestFactory.getHttpClient()

指向 Android 附带的已弃用的。

由于它已被弃用,并在 6.0 中从 Android 中删除,我该如何继续使用带有 RestTemplate 的 HttpClient 对象?

由于它们共享相同的包(org.apache.http.client),我不确定如何在 6.0 之前/之后使其工作。

(我尝试在不设置 HttpClient 的情况下使用 httpclient-android 和 HttpComponentsClientHttpRequestFactory,然后它似乎正在使用 CloseableHttpClient。但方法签名是前面提到的已弃用的 HttpClient。)

指针将不胜感激。

4

2 回答 2

0

我认为您可以使用 springframework (org.springframework.http.client.SimpleClientHttpRequestFactory) 中的 SimpleClientHttpRequestFactory 。

重写 prepareConnection 方法以设置超时和其他参数。

public class MySimpleClientHttpRequestFactory  extends SimpleClientHttpRequestFactory {

   @Override
   protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
    super.prepareConnection(connection, httpMethod);
    connection.setConnectTimeout(5000);
    connection.setReadTimeout(10000);
   }
}

然后将其设置为 RestTemplate。

SimpleClientHttpRequestFactory factory = new MySimpleClientHttpRequestFactory();
RestTemplate template = new RestTemplate(factory)
于 2018-01-10T09:21:38.777 回答
0

您可以在 gradle 或添加 jar 中显式添加它的依赖项,但请尝试考虑现代选项,例如 volley'com.android.volley:volley:1.0.0' 或 okHttp 'com.squareup.okhttp3:okhttp:3.4.1',或者您可以使用 Rest-Template for android 'org.springframework.android:spring-android-rest-template:2.0.0.M3'

于 2016-08-01T16:41:48.433 回答