刚刚给公司两个系统写了一个中间件,用于同步一些数据,用了 RestTemplate 这个家伙,确实相当友好,也简化了 http 请求,但是我也走了很多弯路,也被网上的那些各种不完整的博客坑惨了,下面说重点:
一. RestTemplate 简单配置
@Configuration
public class RestTemplateConfig {
@Bean
@ConditionalOnMissingBean({ RestOperations.class, RestTemplate.class })
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
<!--使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为"ISO-8859-1")-->
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
<!--!!!!!!!!!!严重警告,一定不要这么配置-->
<!--这样就改变的convert的顺序,当接口采用@requestbody接收的时候,会报 parse error-->
<!--while (iterator.hasNext()) {-->
<!-- HttpMessageConverter<?> converter = iterator.next();-->
<!-- if (converter instanceof StringHttpMessageConverter) {-->
<!-- iterator.remove();-->
<!-- }-->
<!--}-->
<!--messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));-->
<!--正确姿势-->
while (iterator.hasNext()) {
HttpMessageConverter<?> converter = iterator.next();
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) converter).setDefaultCharset(Charset.forName(