0

問題

既存の http post メソッドを に変換しようと考えてspring-androidいますが、失敗しました。

JSONObject defaultJsonObject = new JSONObject();
defaultJsonObject.put("ln", "Kiat");
defaultJsonObject.put("CountryName", "Malaysia");
defaultJsonObject.put("CityName", "Kuala Lumpur");

これは私の既存の http 投稿であり、次のように投稿本文を形成します。[json={"ln":"Kiat","CountryName":"Malaysia","CityName":"Kuala Lumpur"}]

List<NameValuePair> postParams = new ArrayList<NameValuePair>();
 postParams.add(new BasicNameValuePair("json", jsonObject.toString()));
 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams);
 System.out.println("post param: " + postParams.toString());
 post.setEntity(entity);
 post.setHeader("Accept", "application/json");

しかし、RestTemplate で Spring-android に変換すると失敗しました。[json={"ln":"Kiat","CountryName":"Malaysia","CityName":"Kuala Lumpur"}] 500 Internal Server Error が発生し続けるので、私はすでに投稿本文を形成することができました

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
List<NameValuePair> postParams1 = new ArrayList<NameValuePair>();
postParams1.add(new BasicNameValuePair("json", jsonObject.toString()));
HttpEntity<?> requestEntity = new HttpEntity<Object>(postParams1, requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity,String.class)

投稿本文の形式は次のようになります

[json={"ln":"キアット","国名":"マレーシア","都市名":"クアラルンプール"}]

4

1 に答える 1

0

(質問の編集で回答。コミュニティ wiki の回答に変換。回答がない質問を参照してください。ただし、コメントで問題が解決されました (またはチャットで拡張されました) )

OP は次のように書いています。

問題が解決しました。解決:

を使用するRestTemplateには、必要なコンバーターがわからない場合は、コンストラクターで TRUE を設定する必要があります。RestTemplate restTemplate = new RestTemplate(true);これにより、すべての標準コンバーターが含まれます。しかし、不要なコンバーターをすべて含める必要があるため、無駄のようです。

私の場合、テスト後、HTTP 投稿を成功させるには 2 つのコンバーターが必要であることがわかりました。

restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());

必要なコンバーターの組み合わせがわかりません。多分誰かがより深い説明を持っていますか?

于 2015-01-31T17:37:27.427 に答える