2013-03-07 9 views
15

投稿要求の本文にキー値のペアを渡す必要があります。しかし、私のコードを実行すると、 "リクエストを書くことができませんでした:リクエストタイプ[org.springframework.util.LinkedMultiValueMap]とコンテンツタイプ[text/plain]に適切なHttpMessageConverterが見つかりません"というエラーが表示されますJavaでresttemplateを使用してキー値ペアを渡す方法

マイコードは次のように:

MultiValueMap<String, String> bodyMap = new LinkedMultiValueMap<String, String>(); 
bodyMap.add(GiftangoRewardProviderConstants.GIFTANGO_SOLUTION_ID, giftango_solution_id); 
bodyMap.add(GiftangoRewardProviderConstants.SECURITY_TOKEN, security_token); 
bodyMap.add(GiftangoRewardProviderConstants.REQUEST_TYPE, request_type); 

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.TEXT_PLAIN); 

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(bodyMap, headers); 

RestTemplate restTemplate = new RestTemplate(); 
ResponseEntity<String> model = restTemplate.exchange(giftango_us_url, HttpMethod.POST, request, String.class); 
String response = model.getBody(); 

答えて

20

FormHttpMessageConverterは、HTTPリクエストに送信するためMultiValueMapオブジェクトを変換するために使用されます。このコンバータのデフォルトのメディアタイプはapplication/x-www-form-urlencodedmultipart/form-dataです。 text/plainとして、コンテンツタイプを指定することで、StringHttpMessageConverter

headers.setContentType(MediaType.TEXT_PLAIN); 

を使用するようにRestTemplateを言っているしかし、それコンバータは、あなたがエラーを取得している理由である、MultiValueMapの変換をサポートしていません。あなたにはいくつかの選択肢があります。あなたはapplication/x-www-form-urlencoded

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 

にコンテンツタイプを変更することもできますし、コンテンツタイプを設定することはできませんとRestTemplateはあなたのためにそれを処理してみましょう。これは、変換しようとしているオブジェクトに基づいてこれを判断します。代わりに、次の要求を使用してみてください。

ResponseEntity<String> model = restTemplate.postForEntity(giftango_us_url, bodyMap, String.class); 
+0

また、APPLICATION_FORM_URLENCODEDを使用する場合はresttemplateにFormHttpMessageConverterを設定してください。 – chrismarx

関連する問題