I am struggling to have my multipart/form-data encoded in UTF-8 in RestTemplate entity. I don't know what am I doing wrong. Below I posted my code
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);
When I insert any Polish letters into text parameter, for example: "ł" the rest template sends it as a "?". You can see it below, that in fact the body looks like this and "ł" gets converted into "?":
Content-Disposition: form-data; name="text"
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 1
?
I don't know why it is not working properly. How to change the default ISO-8859-1 encoding to UTF-8? Any help very appreciated!
Cheers.
SOLUTION FOUND:
I have modified slightly my AsyncRestTemplate and it no longer loses UTF-8 encoding. My working piece of code:
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);