如何在java中使用 resttemplate 传递键值对

2022-09-01 15:51:03

我必须在 post 请求的正文中传递键值对。但是当我运行我的代码时,我收到错误“无法写入请求:没有为请求类型[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();

答案 1

用于转换对象以发送 HTTP 请求。此转换器的默认媒体类型为 和 。通过将内容类型指定为 ,您可以告诉 RestTemplate 使用FormHttpMessageConverterMultiValueMapapplication/x-www-form-urlencodedmultipart/form-datatext/plainStringHttpMessageConverter

headers.setContentType(MediaType.TEXT_PLAIN); 

但是该转换器不支持转换 ,这就是您收到错误的原因。您有几种选择。您可以将内容类型更改为MultiValueMapapplication/x-www-form-urlencoded

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

或者,您可以不设置内容类型,而是让 RestTemplate 为您处理它。它将根据您尝试转换的对象确定这一点。请尝试使用以下请求作为替代方法。

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

答案 2

推荐