Как не экранировать символы тела формы в 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.

Другие вопросы по тегам