Как передать пару значений ключа с помощью шаблона resttemplate в java

Я должен передать пару ключ-значение в теле почтового запроса. Но когда я запускаю свой код, я получаю сообщение об ошибке: «Не удалось написать запрос: не найден подходящий HttpMessageConverter для типа запроса [org.springframework.util.LinkedMultiValueMap] и типа содержимого [text/plain]»

Мой код выглядит следующим образом:

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

person Abhinandan Sharma    schedule 07.03.2013    source источник


Ответы (1)


FormHttpMessageConverter используется для преобразования объектов MultiValueMap для отправки в HTTP-запросах. Типы носителей по умолчанию для этого конвертера: application/x-www-form-urlencoded и multipart/form-data. Указав тип содержимого как text/plain, вы указываете RestTemplate использовать StringHttpMessageConverter

headers.setContentType(MediaType.TEXT_PLAIN); 

Но этот преобразователь не поддерживает преобразование MultiValueMap, поэтому вы получаете сообщение об ошибке. У вас есть несколько вариантов. Вы можете изменить тип контента на application/x-www-form-urlencoded

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

Или вы НЕ можете установить тип содержимого и позволить RestTemplate обрабатывать его за вас. Он определит это на основе объекта, который вы пытаетесь преобразовать. Попробуйте использовать следующий запрос в качестве альтернативы.

ResponseEntity<String> model = restTemplate.postForEntity(giftango_us_url, bodyMap, String.class);
person Roy Clarkson    schedule 08.03.2013
comment
И убедитесь, что resttemplate настроен с помощью FormHttpMessageConverter, если вы также собираетесь использовать APPLICATION_FORM_URLENCODED. - person chrismarx; 24.11.2015