Springs resttemplace と Apache 共通 HTTP クライアントを使用してリクエストを行う Android クライアント。
私は、ユーザー情報文字列を含む http ヘッダー文字列「ERROR」で 401 エラーを返すことがあるサーバーに対して作業しています。文字列は言語に依存するため、スカンジナビア文字などを含む場合があります。
Firefox RESTclient プラグインで調べた場合と同様に、IOS アプリでも文字列は問題ないように見えます。
ただし、私のAndroidアプリでは、文字を正しく出力することはできません。誰かがデータを正しく出力する方法を考えていただければ幸いです。
サーバーは content-type UTF-8 を送信し、取得しようとするパラメーターを設定する httpservletresponse で通常の .setHeader() を送信します。
Androidクライアントでのresttemplateの作成は次のとおりです(ご覧のとおり、ほとんどの方法を試しました):
HttpClient httpClient = new HttpClient();
Credentials defaultcreds = new UsernamePasswordCredentials(msisdn, password);
httpClient.getState().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), defaultcreds);
httpClient.getParams().setSoTimeout(prefs.getServerTimeout());
httpClient.getParams().setConnectionManagerTimeout(3000);
httpClient.getParams().setContentCharset("utf-8");
httpClient.getParams().setCredentialCharset(prefs.getCredentialsEncoding());
httpClient.getParams().setHttpElementCharset("utf-8");
httpClient.getParams().setUriCharset("utf-8");
CommonsClientHttpRequestFactory requestFactory = new CommonsClientHttpRequestFactory(httpClient);
requestFactory.setReadTimeout(prefs.getServerTimeout());
RestTemplate restTemplate = new RestTemplate(requestFactory);
// Add message converters
List<HttpMessageConverter<?>> mc = restTemplate.getMessageConverters();
MappingJacksonHttpMessageConverter json = new MappingJacksonHttpMessageConverter();
List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
json.setSupportedMediaTypes(supportedMediaTypes);
mc.add(json);
restTemplate.setMessageConverters(mc);
// Set our specific error handler
restTemplate.setErrorHandler(new MyErrorHandler());
これは私の http 応答であり、Firefox で同じ要求を実行した場合に restclient からコピーされます。
Status Code: 401 Unauthorized
Content-Length: 954
Content-Type: text/html;charset=utf-8
Date: Sat, 19 Jan 2013 23:53:10 GMT
ERROR: För att <contents cut out but as you see Scandinavian char looks fine here >
Server: Apache-Coyote/1.1
WWW-Authenticate: Basic realm="rest"