如何在发出POST请求时不在Spring RestTemplate中转义形式的正文字符?

时间:2017-03-21 16:37:45

标签: spring http spring-boot resttemplate

我有以下代码,我正在发出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 个答案:

答案 0 :(得分:0)

我认为您需要向RestTemplate添加FormHttpMessageConverter而不是StringHttpMessageConverter。