您的位置:首页 > Web前端 > JQuery

springmvc Spring3 MVC @ResponseBody返回,jquery ajax调用中文乱码问题解决

2013-06-15 19:05 1096 查看
转自:http://blog.csdn.net/xiaoxin888888/article/details/8279745

转自:http://thoughtfly.iteye.com/blog/1585048

Spring3.0 MVC @ResponseBody 的作用是把返回值直接写到HTTP response body里。具体实现AnnotationMethodHandlerAdapter类handleResponseBody方法,具体实现代码:

结果输出乱码:???????

有人跟踪@ResponseBody 的实现类发现其默认的编码是 iso-8859-1,

解决办法,在spring mvc的配置文件中手工配置bean:

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->    

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >  

<property name="messageConverters">   

         <list>   

             <bean class = "org.springframework.http.converter.StringHttpMessageConverter">   

                <property name = "supportedMediaTypes">

                      <list>

                          <value>text/html;charset=UTF-8</value>   

                     </list>   

                </property>   

             </bean>   

         </list>   

   </property>  

</bean> 

这样通过配置AnnotationMethodHandlerAdapter类messageConverters属性来指定编码。

记住,需要把bean部分加入到<context:component-scan base-package="com.zlscw.mvc" />前面,这样就可以在jquery中直接调用而不出现乱码了。

 其实我觉得还有一种方法也是可行的。可惜作者没有没有指定类。

使用spring mvc3的@ResponseBody注解以期待返回json时,却发现返回值中文乱码。

研究后发现,spring使用该注解时在代码内部使用了硬编码iso-8859-1

 

解决方案:

想法有两种,一种是重写注解,还有一种是使用spring的BeanPostProcessor接口实现

 

Java代码  


/** 

 * 解决spring MVC3 中@ResponseBody的中文乱码问题。在bean中注册即可 

 */  

public class UTF8StringBeanPostProcessor implements BeanPostProcessor {  

    @Override  

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {  

        if (bean instanceof StringHttpMessageConverter) {  

            MediaType mediaType = new MediaType("text", "plain", Charset.forName("UTF-8"));  

            List<MediaType> types = new ArrayList<MediaType>();  

            types.add(mediaType);  

            ((StringHttpMessageConverter) bean).setSupportedMediaTypes(types);  

        }  

        return bean;  

    }  

  

    @Override  

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {  

        return bean;  

    }  

}  

 再在spring的xml中注册

Xml代码  


<!-- 解决使用@ResponseBody 的中文乱码。 -->  

    <bean class="xxx.xxx.xxx.UTF8StringBeanPostProcessor">  

    </bean>  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息