RestTemplate 消息转换器(解析错误),中文乱码问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
RestTemplate restTemplate = new RestTemplate();

/*
支持响应 content type [text/html;charset=UTF-8]
1. 拿到所有转换器
2. 得到 MappingJackson2HttpMessageConverter
3. 给 MappingJackson2HttpMessageConverter 设置支持的 MediaTypes
*/
restTemplate.getMessageConverters().stream()
.filter(c -> c instanceof MappingJackson2HttpMessageConverter)
.forEach(c -> ((MappingJackson2HttpMessageConverter) c).setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM, MediaType.TEXT_HTML, MediaType.TEXT_PLAIN)));


/*
支持 UTF-8(StringHttpMessageConverter 默认:Charset DEFAULT_CHARSET = StandardCharsets.ISO_8859_1)
*/
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
stringHttpMessageConverter.setWriteAcceptCharset(true);
for (int i = 0; i < restTemplate.getMessageConverters().size(); i++) {
if (restTemplate.getMessageConverters().get(i) instanceof StringHttpMessageConverter) {
restTemplate.getMessageConverters().remove(i);
restTemplate.getMessageConverters().add(i, stringHttpMessageConverter);
}
}

return restTemplate;