我需要在使用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。)
非常感谢指针。
答案 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)