springmvc返回乱码

来源:互联网 发布:linux sendto 编辑:程序博客网 时间:2024/06/05 00:48

先说一下我的经历,以及解决问题的而过程。

  在使用SpringMVC的时候,最开始的时候在配置文件中使用<mvc:annotation-driven />去自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,这是spring MVC为@Controllers分发请求所必须的。再后来,Ajax请求需要返回字符串,遂在控制器上使用@ResponseBody注解来实现,这时候遇到的一个问题是,返回中文字符的时候会乱码,关于中文乱码的解决办法倒时有很多。SpringMVC的@ResponseBody注解使用的处理类为Spring的org.springframework.http.converter.StringHttpMessageConverter类,返回中文乱码的原因是其默认处理的字符集是ISO-8859-1。So...

  解决办法1:

    在控制器上加上@RequestMapping(value="/checkLogin",method=RequestMethod.POST,produces="text/html;charset=UTF-8")字符编码的注解,加上注解之后,中文乱码的问题的到了解决,但是之后又有了为HandlerMapping添加拦截器的需求,在这里为了精准的添加拦截器,所以放弃使用<mvc:annotation-driven />这句话去自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,而改为手动注册。等修改了之后,发现中文乱码的问题又来了,遂采用了另外一种办法。

  解决办法2:

复制代码
<bean        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">        <property name="interceptors">            <list>                <bean class="cn.ciss.interceptor.LoginInterceptor"></bean>            </list>        </property>    </bean>    <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/plain;charset=UTF-8</value> -->                            <value>text/html;charset=UTF-8</value>                        </list>                    </property>                </bean>                <bean                    class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>                <bean                    class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>                <bean                    class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>                <bean                    class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>                <bean                    class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>                <bean                    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>            </list>        </property>    </bean>
复制代码

  这是自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter的代码,之所以自己去注册,是为了增加对SpringMVC的控制能力,比如你想为某个特定的HandleMapping注册一个拦截器之类的。看以上贴出的代码可以看到,在注册org.springframework.http.converter.StringHttpMessageConverter的时候明确了其编码格式为UTF-8。这种解决办法也是我比较喜欢的,因为不用再每一个返回中文字符串上的控制器都加一个@RequestMapping(value="/checkLogin",method=RequestMethod.POST,produces="text/html;charset=UTF-8")这样的注解了。


原创粉丝点击