zoukankan      html  css  js  c++  java
  • SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题

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

      在使用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")这样的注解了。

        

  • 相关阅读:
    谷歌浏览器禁止缩放和全面屏显示
    常用正则表达式
    封装时间函数
    年月日,时分秒,星期
    昨天,明天,月初,月末,最近七天,最近一个月,今天零时js
    React框架
    javaweb基础备忘
    一些java基础知识的备忘
    查看deepin版本
    java中堆栈的一些理解备忘
  • 原文地址:https://www.cnblogs.com/fzj16888/p/5923232.html
Copyright © 2011-2022 走看看