RestTemplate解决乱码问题

spring是一个非常强大的东西,其中提供了一个工具类 RestTemplate 主要提供http服务, RestTempalate 字符串类型默认StringHttpMessageConverter做转码,而StringHttpMessageConverter的默认编码集是ISO8859-1,本工程编码是UTF-8 故发送到服务器端会存在中文乱码 。
把restTempalate 中 StringHttpMessageConverter 默认编码设置为UTF-8 具体:使用 restTempalate 构造函数 public RestTemplate(List> messageConverters) 传入 StringHttpMessageConverter 默认编码集是UTF-8 的转换器,
第一种 注入式:
  配置文件 :
 <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
       	<constructor-arg index="0">
       		<list>
       			<bean id="byteArrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
       			<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
       				<constructor-arg value="UTF-8"></constructor-arg>
       			</bean>
       			<bean id="resourceHttpMessageConverter" class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
       			<bean id="sourceHttpMessageConverter" class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
       			<bean id="allEncompassingFormHttpMessageConverter" class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean>
       			<bean id="jaxb2RootElementHttpMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
       			<bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
       		</list>
       	</constructor-arg>
   	</bean>


这样需要spring注入进来才可以,

第二种 非注入式:使用 设置Http请求头中设置  charset=UTF-8 修改默认编码,这样是提供new 的方法 设置编码
RestTemplate restTemplate = new RestTemplate();
    StringHttpMessageConverter stringHttpMessageConverter=newStringHttpMessageConverter(Charset.forName("UTF-8"));  
    List<HttpMessageConverter<?>> list=new ArrayList<HttpMessageConverter<?>>(); 
    list.add(stringHttpMessageConverter);
    restTemplate.setMessageConverters(list);   

以上两种方式均可以搞定restTemplate带来的乱码问题,但是spring 单例的有点第二种没有凸显出来,所以选择第一种还是比较靠谱的。

猜你喜欢

转载自soberchina.iteye.com/blog/2314343