解决SpringMVC乱码问题

  • 问题场景:采用传统的JSP但是用了前后端分离,使用JSON传输数据,
    • JSP设置都是正确的: <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8"%>
    • web.xml 的编码过滤器配置并没有用。

参考博客 Spring MVC 响应报文乱码
参考博客 解决Spring MVC @ResponseBody返回中文字符串乱码问题

最终找到合适的方法, 并调整了下配置,更适合JSON

 <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                    <!-- 如果是前后端使用JSON作为主要数据交换格式就把JSON列为第一个, 否则就会被认为是Text -->
                        <value>application/json; charset=UTF-8</value>
                        <value>text/plain; charset=UTF-8</value>
                        <value>text/html; charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
  • 而且以上的配置也解决了一个一直困扰我的JS操作Ajax返回的JSON问题:

    • 直接点引用属性或者a[‘b’]的方式,
      • 迭代集合:自带foreach循环 data.forEach(function(value){})
    • 但是有时候不能使用,会undefined,eval(‘(‘+data+’)’)解析后才能用
      • 原因在于Response Headers 的 Content-Type:application/json;charset=UTF-8 如果回应的类型是 text/plain 就需要使用 eval(‘(‘+data+’)’)才能用
      • 如果设置成JSON就可以直接点引用和循环迭代
  • 有一篇博客提到了查看Ajax请求的响应头信息才让我恍然大悟,所以调整上述的配置默认将请求优先设置为JSON格式数据返回,正好适合这种应用场景

猜你喜欢

转载自blog.csdn.net/kcp606/article/details/80027604
今日推荐