解决RestTemplate 中文乱码有两种方法:
1、RestTemplate 的转换器 StringHttpMessageConverter 默认编码是ISO-8859-1,将StringHttpMessageConverter 设置成UTF-8即可。
在application类下
@Bean @LoadBalanced RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters(); for (HttpMessageConverter<?> httpMessageConverter : list) { if(httpMessageConverter instanceof StringHttpMessageConverter) { ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName(StandardCharsets.UTF_8.toString())); break; } } return new RestTemplate(); }
2、springboot 的StringHttpMessageConverter转换器跟RestTemplate是一样的,建立一个配置类,将StringHttpMessageConverter 编码设置成utf-8即可
@Configuration public class WebConfig extends WebMvcConfigurationSupport { private final MyInterceptor myInterceptor; public WebConfig(MyInterceptor myInterceptor) { this.myInterceptor = myInterceptor; } @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor).addPathPatterns("/**"); super.addInterceptors(registry); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Bean public HttpMessageConverter<String> responseBodyStringConverter() { return new StringHttpMessageConverter(StandardCharsets.UTF_8); } /** * 修改StringHttpMessageConverter默认配置 * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(responseBodyStringConverter()); } }