把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 单例的有点第二种没有凸显出来,所以选择第一种还是比较靠谱的。