Как не экранировать символы тела формы в Spring RestTemplate при выполнении запроса POST?
У меня есть следующий код, где я делаю запрос формы POST. Тело запроса содержит имя пользователя и пароль. Пароль содержит символы @, который заменен RestTemplate на%40, и я получаю "несанкционированную" ошибку, поскольку пароль сейчас неверный. Ниже приводится информация об отладке из bufferOutput(тело запроса)
merchant_id=firstname+de-lastname%40gmail.com&password=%40Password
Вот фрагмент кода, который делает звонок.
MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>();
String url = "SOME_URL";
formData.add("username", "xay@gmail.com");
formData.add("password", "@name321");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String,String>> requestEntity = new HttpEntity<MultiValueMap<String,String>>(formData,headers);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
restTemplate.exchange(url, HttpMethod.POST, requestEntity, Authentication.class,"321");
Вопрос в том, как сказать restTemplate, чтобы он не экранировал данные тела? Обратите внимание, что запрос должен быть запросом пост-формы, и я не могу использовать UriComponentsBuilder для решения проблемы.
1 ответ
Я думаю, что вам нужно добавить FormHttpMessageConverter к вашему RestTemplate, а не StringHttpMessageConverter.