RestTemplate中对字符串使用的是StringHttpMessageConverter中默认的编码,RestTemplate的构造方法:
public RestTemplate() {
this.messageConverters.add(new ByteArrayHttpMessageConverter());
// 重点是这个
this.messageConverters.add(new StringHttpMessageConverter());
this.messageConverters.add(new ResourceHttpMessageConverter(false));
this.messageConverters.add(new SourceHttpMessageConverter<>());
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
}
public StringHttpMessageConverter() {
// 点进去看下这个 DEFAULT_CHARSET
this(DEFAULT_CHARSET);
}
// 居然是 ISO_8859_1
public static final Charset DEFAULT_CHARSET = StandardCharsets.ISO_8859_1;
解决方法
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate(simpleClientHttpRequestFactory());
// 加入这一行
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
return restTemplate;
}