@Bean 	public RestTemplate restTemplate(ClientHttpRequestFactory factory) { 		RestTemplate restTemplate = new RestTemplate(factory);         List<HttpMessageConverter<?>>messageConverters =   restTemplate.getMessageConverters();         Iterator<HttpMessageConverter<?>> iterator=messageConverters.iterator();         while(iterator.hasNext()){             HttpMessageConverter<?> converter=iterator.next();             //原有的String是ISO-8859-1编码 去掉             if(converter instanceof StringHttpMessageConverter){                 iterator.remove();             }                      }         messageConverters.add(new StringHttpMessageConverter(Charset.forName("utf-8"))); 		return restTemplate; 	}

我们来看下RestTemplate  构造方法的源码

/** 	 * Create a new instance of the {@link RestTemplate} using default settings. 	 * Default {@link HttpMessageConverter}s are initialized. 	 */ 	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());  		if (romePresent) { 			this.messageConverters.add(new AtomFeedHttpMessageConverter()); 			this.messageConverters.add(new RssChannelHttpMessageConverter()); 		}  		if (jackson2XmlPresent) { 			this.messageConverters.add(new MappingJackson2XmlHttpMessageConverter()); 		} 		else if (jaxb2Present) { 			this.messageConverters.add(new Jaxb2RootElementHttpMessageConverter()); 		}  		if (jackson2Present) { 			this.messageConverters.add(new MappingJackson2HttpMessageConverter()); 		} 		else if (gsonPresent) { 			this.messageConverters.add(new GsonHttpMessageConverter()); 		} 		else if (jsonbPresent) { 			this.messageConverters.add(new JsonbHttpMessageConverter()); 		}  		if (jackson2SmilePresent) { 			this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter()); 		} 		if (jackson2CborPresent) { 			this.messageConverters.add(new MappingJackson2CborHttpMessageConverter()); 		} 	} 

初始化RestTemplate默认初始化了几个 MessageConverter ,不过StringHttpMessageConverter 默认使用的是ISO_8859_1编码,我们只需移除旧的,初始化新的UTF-8的StringHttpMessageConverter,设置进去就行。

 

 

同理,如果我们不需要使用默认的json转换器,想使用国产的FASTJSON,也可通过替换完成。下篇文章说明。