Добавить кодировку UTF-8 в ResponseEntity
У меня есть responseEntity
как этот:
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
requestHeaders.setContentType(MediaType.valueOf("text/plain;charset=UTF-8"));
HttpEntity requestEntity = new HttpEntity(jsonQuery, requestHeaders);
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
//Not in UTF-8!!
logger.debug("result: " + responseEntity.getBody());
Но он не закодирован в UTF-8
и производит символы, подобные этому: Soci굩
. Можно ли сделать это в UTF-8
или добавить кодировку как-нибудь в restTemplate?
Ответы
Ответ 1
Решение заключалось в том, чтобы добавить StringHttpMessageConverter
с utf-8
в restTemplate
bean, например:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
return restTemplate;
}
Ответ 2
requestHeaders .add("Content-Type", "text/html; charset=utf-8");
Ответ 3
Я решил эту проблему. Мне нужно POST-объект строки в теле запроса с UTF-8.
текст/обычный
httpHeaders.setContentType(new MediaType ("text", "plain", StandardCharsets.UTF_8));
Applicaton/JSON
httpHeaders.setContentType(new MediaType ("applicationaton", "json", StandardCharsets.UTF_8));
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> resposeEntity = null;
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8));
HttpEntity<String> httpEntity = new HttpEntity<String>(stringContent, httpHeaders);
responseEntity = restTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, String.class);
if (HttpStatus.OK.equals(responseEntity.getStatusCode())) {
logger.debug("... success ... result: " + responseEntity.getBody());
}