向ResponseEntity添加UTF-8编码

dim*_*zak 14 spring

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());
Run Code Online (Sandbox Code Playgroud)

但它没有编码UTF-8并产生这样的字符:Soci?.是否有可能UTF-8restTemplate中以某种方式进行编码或添加编码?

Ahm*_*emi 6

requestHeaders .add("Content-Type", "text/html; charset=utf-8");
Run Code Online (Sandbox Code Playgroud)

  • 请求标头,而不是响应标头?不应该请求标头不可修改吗?我的意思是,它们是由客户发送的,不应该被允许更改! (3认同)

dim*_*zak 4

解决方案是在bean 中添加一个StringHttpMessageConverterwith ,如下所示:utf-8restTemplate

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters()
            .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
    return restTemplate;
}
Run Code Online (Sandbox Code Playgroud)

  • 由于改变了问题并消除了原来的问题而投了反对票。您可以将第二个问题作为*更新*或新问题提出 (3认同)