如何强制RestTemplate使用UTF-8编码发送多部分/表单数据



我正在努力在RestTemplate实体中以UTF-8编码我的多部分/表单数据。我不知道我做错了什么。下面我张贴了我的代码

LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("text", text);
map.add("id", id);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("Content-Type","multipart/form-data;charset=UTF-8");
HttpEntity<LinkedMultiValueMap<String, String>> entity = new HttpEntity<>(map, httpHeaders);
ListenableFuture<ResponseEntity<String>> response = asyncRestOperations
                .postForEntity(url, entity, String.class);

当我在文本参数中插入任何波兰字母时,例如:rest模板以"?"的形式发送它。你可以在下面看到,实际上身体是这样的,"z"被转换成"?":

Content-Disposition: form-data; name="text"
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 1
?
我不知道为什么它不能正常工作。如何将默认的ISO-8859-1编码更改为UTF-8?任何帮助,非常感谢!

欢呼。

解决方案发现:

我已经稍微修改了我的AsyncRestTemplate,它不再失去UTF-8编码。我的工作代码:

AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();
List<HttpMessageConverter<?>> messageConverters = asyncRestTemplate.getMessageConverters();
StringHttpMessageConverter stringMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
AllEncompassingFormHttpMessageConverter allEncompassingConverter = new AllEncompassingFormHttpMessageConverter();
allEncompassingConverter.setCharset(Charset.forName("UTF-8"));
allEncompassingConverter.setMultipartCharset(Charset.forName("UTF-8"));
allEncompassingConverter.setPartConverters(Collections.singletonList(stringMessageConverter));
for (Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator(); iterator.hasNext(); ) {
    HttpMessageConverter conv = iterator.next();
    if (conv instanceof AllEncompassingFormHttpMessageConverter) {
        iterator.remove();
    }
}
messageConverters.add(allEncompassingConverter);
asyncRestTemplate.setMessageConverters(messageConverters);

参考这里提供的答案Spring RestTemplate字符集UTF-8不工作

对于特殊字符支持,需要对数据进行编码。

相关内容

  • 没有找到相关文章

最新更新