
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;
}
RestTemplate字符编码问题及解决
探讨了RestTemplate中字符串编码默认为ISO_8859_1的问题,并提供了将编码修改为UTF_8的方法。通过在Bean配置中自定义StringHttpMessageConverter,可以解决由默认编码引发的中文乱码问题。
1002

被折叠的 条评论
为什么被折叠?



