【问题标题】:HttpClient is removed from Android 6.0, how do i use it with RestTemplate?HttpClient 已从 Android 6.0 中删除,我如何将它与 RestTemplate 一起使用?
【发布时间】:2016-12-06 19:59:04
【问题描述】:

我在使用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。)

指针将不胜感激。

【问题讨论】:

    标签: android spring resttemplate spring-android


    【解决方案1】:

    您可以在 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'

    【讨论】:

    • 好吧,我环顾四周,但没有找到设置我需要的参数的好方法,最重要的是指定用于基本身份验证凭据的字符集。 HttpClient 是我唯一找到它的地方。
    • OKHttp Request.Builder reqBuilder = new Request.Builder().addHeader("Accept-Charset", "utf-8") 这个怎么样。您也可以使用其他字符集。
    【解决方案2】:

    我认为你可以使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2012-05-06
      • 2017-05-24
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多