2016-08-01 70 views
1

我有需要使用Spring的RestTemplate使用HttpClient設置某些參數。在從Android 6.0中刪除HttpClient,我如何使用RestTemplate?

HttpComponentsClientHttpRequestFactory.getHttpClient() 

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的,例如指向棄用的一個附帶的Android:

我目前通過做到這一點。

由於它已被棄用,並從6.0中刪除Android,我該如何去繼續使用RestTemplate的HttpClient對象?

由於他們共享相同的包(org.apache.http.client),我不知道如何使這項工作在6.0前/後。

(我嘗試使用HttpClient的,Android和HttpComponentsClientHttpRequestFactory沒有設置的HttpClient,然後好像是用CloseableHttpClient,但該方法的簽名是過時的HttpClient提到。)

指針將不勝感激。

回答

0

您可以添加它的依賴中明確的gradle或添加罐子,但嘗試考慮像凌空現代選項'com.android.volley:volley:1.0.0' 或okHttp 'com.squareup.okhttp3:okhttp:3.4.1'或者您可以使用REST的模板爲Android 'org.springframework.android:spring-android-rest-template:2.0.0.M3'

+0

嗯,我環顧四周,但沒有找到好的方法來設置我需要的參數,最重要的是指定了用於基本認證憑證的字符集。 HttpClient是我找到它的唯一地方。 – Mathias

+0

在OKHttp中如何呢?Request.Builder reqBuilder = new Request.Builder()。addHeader(「Accept-Charset」,「utf-8」)'''。 你也可以有其他的字符集。 –

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)