web-dev-qa-db-ja.com

javaでresttemplateを使用してキーと値のペアを渡す方法

ポストリクエストの本文でキーと値のペアを渡す必要があります。しかし、コードを実行すると、「リクエストを書き込めませんでした:リクエストタイプ[org.springframework.util.LinkedMultiValueMap]およびコンテンツタイプ[text/plain]に適切なHttpMessageConverterが見つかりませんでした」というエラーが表示されます。

私のコードは次のとおりです:

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();
27

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

headers.setContentType(MediaType.TEXT_PLAIN); 

ただし、そのコンバーターはMultiValueMapの変換をサポートしていないため、エラーが発生します。いくつかのオプションがあります。 content-typeをapplication/x-www-form-urlencodedに変更できます

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

または、content-typeを設定してRestTemplateに処理させることはできません。これは、変換しようとしているオブジェクトに基づいてこれを決定します。代わりに次のリクエストを使用してみてください。

ResponseEntity<String> model = restTemplate.postForEntity(giftango_us_url, bodyMap, String.class);
29
Roy Clarkson