HttpClient已从Android 6.0中删除,我如何将其与RestTemplate一起使用?

时间:2016-08-01 16:38:00

标签: android spring resttemplate spring-android

我需要在使用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-android和HttpComponentsClientHttpRequestFactory而不设置HttpClient,然后它似乎使用了CloseableHttpClient。但是方法签名是如上所述的弃用的HttpClient。)

非常感谢指针。

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

我认为您可以使用springframework中的SimpleClientHttpRequestFactory(org.springframework.http.client.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)