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

如何在发出POST请求时不转义Spring RestTemplate中的表单正文字符?,spring,http,spring-boot,resttemplate,Spring,Http,Spring Boot,Resttemplate,我有下面的代码,我是在做一个POST表单请求。请求正文包含用户名和密码。密码包含@个字符,该字符被RestTemplate替换为%40,我收到“未经授权”错误,因为密码现在是错误的。 以下是bufferOutput(请求正文)的调试信息 下面是进行调用的代码段 MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>(); String url = "SOME_URL"

我有下面的代码,我是在做一个POST表单请求。请求正文包含用户名和密码。密码包含@个字符,该字符被RestTemplate替换为%40,我收到“未经授权”错误,因为密码现在是错误的。 以下是bufferOutput(请求正文)的调试信息

下面是进行调用的代码段

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");
MultiValueMap formData=新链接的MultiValueMap();
String url=“SOME_url”;
formData.add(“用户名”xay@gmail.com");
添加(“密码”、“@name321”);
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION\u FORM\u URLENCODED);
HttpEntity requestEntity=新的HttpEntity(formData,Header);
RestTemplate RestTemplate=新RestTemplate();
restemplate.getMessageConverters()
.add(0,新的StringHttpMessageConverter(Charset.forName(“UTF-8”));
交换(url,HttpMethod.POST,requestEntity,Authentication.class,“321”);
问题是如何告诉restTemplate不要转义身体数据?
请注意,请求必须是post表单请求,我无法使用UriComponentsBuilder解决此问题。

我认为您需要向RestTemplate中添加一个,而不是StringHttpMessageConverter。

rest模板调用在哪里?添加缺少的调用您的URL编码??
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");