Подтвердить что ты не робот

Добавить кодировку 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?

4b9b3361

Ответ 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());
}