• @ResponseBody 中文乱码 问题


    这篇博文针对的是以下的情形:

    当@ResponseBody 的对象是个蕴含中文的实体对象时,一切正常,当@ResponseBody 的对象是个中文String时,接收到乱码

    (如果连前半句话的情况都是乱码的话,需要检查一下其他地方,比如web.xml里面有没有加encodingFilter、项目编码是不是utf-8之类的。)

    解决方法:

    在SpringMVC配置文件的mvc:annotation-driven标签中,追加supportedMediaTypes属性

     

        <mvc:annotation-driven>
            <mvc:message-converters>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
                <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>
            </mvc:message-converters>
        </mvc:annotation-driven>

    2017-12-07追记

    以上解决方法不再合适。

    首先,@ResponseBody直接 return String的请求方法比较少,一般都是返回一个数据结构,返回一个非String对象的话,就不会乱码了,所以没必要去改SpringMVC的全局配置。

    其次,最好不要把StringHttpMessageConverter的supportedMediaTypes属性覆盖掉,会漏掉Content-Type类型,如上面所示,supportedMediaTypes里面的"application/json"就被漏掉了,只会间接地导致绑定Date类型的参数出问题。

    比较合适的方法是:在@ResponseBody直接return String对象的请求方法中,追加produces属性。

        @RequestMapping(value = "easy_return", method = RequestMethod.GET)
        @ResponseBody
        public String easyReturn() {
            return "汉字";
        }

        @RequestMapping(value = "easy_return", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
        @ResponseBody
        public String easyReturn() {
            return "汉字";
        }

  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/deolin/p/7866398.html
Copyright © 2020-2023  润新知