zoukankan      html  css  js  c++  java
  • spring mvc 返回字符串带双引号及StringHttpMessageConverter乱码处理

    本文转载自:http://blog.csdn.net/wangyangbto/article/details/48804155

    很多人都碰到过,SpringMVC使用 @ResponseBody 注解,返加字符串不做任何处理时,有可能会出现乱码问题。

    这是由于 StringHttpMessageConverter 类中,默认采用的字符集是 ISO-8859-1。

    public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {
    
       public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
    
    
       private final Charset defaultCharset;
    
       private final List<Charset> availableCharsets;
    
       private boolean writeAcceptCharset = true;
    
    
       /**
        * A default constructor that uses {@code "ISO-8859-1"} as the default charset.
        * @see #StringHttpMessageConverter(Charset)
        */
       public StringHttpMessageConverter() {
          this(DEFAULT_CHARSET);
       }

    那么要解决乱码问题,需要改变 StringHttpMessageConverter 中的默认字符集,本文中以UTF-8为例。

    修改默认字付集:

    <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <constructor-arg value="UTF-8" index="0"/>
        <property name="supportedMediaTypes">
            <list>
                <value>text/plain;charset=UTF-8</value>
            </list>
        </property>
    </bean>

    配置起效

    方式一:

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="stringHttpMessageConverter"/>
                <ref bean="jackson2HttpMessageConverter"/>
            </list>
        </property>
    </bean>
    
    <mvc:annotation-driven />

    注:配置必须在 <mvc:annotation-driven /> 之前,否则将不会启效;<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter。

    方式二:

    <mvc:annotation-driven>
        <mvc:message-converters>
            <ref bean="stringHttpMessageConverter"/>
            <ref bean="jackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>

    接下来的内容转载自:http://blog.csdn.net/flushest/article/details/52755785

    spring mvc中没有直接使用默认配置,而是另外配置了json解析器

     <!-- 返回json  需要导入 fastjson.jar包 -->
        <mvc:annotation-driven>
            <mvc:message-converters register-defaults="false">
                <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
                <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>

    使用@responsebody注解并且返回值类型为String时,返回的string字符串带有双引号,其原因是直接将string类型转成了json字符串,应该在json解析器之前添加字符串解析器

    <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
  • 相关阅读:
    【HDOJ6666】Quailty and CCPC(模拟)
    【2019 Multi-University Training Contest 8】
    分布式锁的理解
    反射工具类【ReflectionUtils】
    Maven常用命令
    maven常用命令介绍
    mysql 优化策略(如何利用好索引)
    centos7搭建svn服务器及客户端设置
    Centos7 配置subversion
    Centos7更改网卡名称Eth0
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/6557825.html
Copyright © 2011-2022 走看看