发现很多人碰到Spring RestTemplate 有中文乱码的问题,网上有两种解决办法:

第一种,修改StringHttpMessageConverter类:

StringHttpMessageConverter类,默认是的编码是ISO-8859-1:
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

把StringHttpMessageConverter这个类的源码中的

Charset.forName("ISO-8859-1");
   改为
   Charset.forName("utf-8");

编译后重新放在org.springframework.web-3.0.5.RELEASE.jar中

这种办法个人不太喜欢。


第二种:用配置方式,在你的app-context.xml中写入AnnotationMethodHandlerAdapte配置

 
           
               
               
                     
                          text/html;charset=UTF-8  
                     
 
               
 
             
 
         
 
   

这个其实也有问题,不能从根本解决乱码,因为它只对服务端起作用,而RestTemplate不会用作用,毕竟RestTemplate 是一个client,必须保证client编码跟服务端接受的编码一致,否则还是会出现乱码;

我的解决办法就是在app-context.xml里面配置好RestTemplate的messageConverters:


        
            
                
                    
                        
                            application/x-www-form-urlencoded;charset=UTF-8
                            multipart/form-data;charset=UTF-8
                            text/plain;charset=UTF-8
                            application/xml;charset=UTF-8
                        
                    
                    
                        
                            
                                
                                    
                                        text/html;charset=UTF-8
                                        text/plain;charset=UTF-8
                                        multipart/form-data;charset=UTF-8
                                        application/xml;charset=UTF-8
                                    
                                
                            
                            
                            
                            
                            
                            
                        
                    
                
                
                    
                        
                            text/html;charset=UTF-8
                            text/plain;charset=UTF-8
                            multipart/form-data;charset=UTF-8
                            application/xml;charset=UTF-8
                        
                    
                
            
        
    

其中的关键就是partConverters,对他里面的Converter进行编码的配置;

另外,在代码里面要用autowired的办法注入RestTemplate ,new RestTemplate的话还是会用原来的partConverters 的配置。

 
@Autowired
    RestTemplate rt;