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

Как передать пару ключевых значений с помощью 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();
4b9b3361

Ответ 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);