详解Spring MVC3返回JSON数据中文乱码问题解决

下面将为你详细讲解“详解Spring MVC3返回JSON数据中文乱码问题解决”的完整攻略。

下面将为你详细讲解“详解Spring MVC3返回JSON数据中文乱码问题解决”的完整攻略。

问题描述

当Spring MVC3框架返回JSON格式数据的时候,中文字符往往会出现乱码问题,需要进行解决。

解决方案

方案一:修改配置文件

在Spring的配置文件中,增加以下配置即可解决中文乱码问题。

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8" />
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="prettyPrint" value="true" />
            <property name="supportedMediaTypes">
                <list>
                    <value>application/json;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

其中,需要注意以下两点:

  • StringHttpMessageConverterMappingJackson2HttpMessageConverter 中都需要指定编码为UTF-8
  • MappingJackson2HttpMessageConvertersupportedMediaTypes属性需要指定application/json;charset=UTF-8,以确保响应头中的Content-type正确地指明了返回的内容是JSON格式数据,并且使用的是UTF-8编码。

方案二:手动设置HttpServletResponse响应头

在处理请求返回JSON数据的方法中,手动设置HttpServletResponse的响应头:

@RequestMapping(value = "/getData", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> getData(HttpServletResponse response) throws IOException {
    response.setContentType("application/json;charset=UTF-8");
    Map<String, Object> data = new HashMap<>();
    data.put("name", "张三");
    data.put("age", 18);
    return data;
}

这里需要特别注意的是,设置HttpServletResponse响应头的时候,需要指定编码为UTF-8,这样才能确保返回的JSON数据中包含的中文字符不会出现乱码。

示例说明

下面给出两个示例:

示例一

在Spring MVC中返回一个包含中文字符的对象:

@RequestMapping(value = "/getUserInfo", method = RequestMethod.GET)
@ResponseBody
public UserInfo getUserInfo() {
    UserInfo userInfo = new UserInfo();
    userInfo.setName("李四");
    userInfo.setAge(20);
    return userInfo;
}

其中UserInfo类的定义如下:

public class UserInfo {
    private String name;
    private Integer age;

    // getter和setter
}

使用上述的配置方案或者手动设置响应头方案都可以正确返回UTF-8编码的JSON数据。

示例二

如果数据源是从数据库中查询得到的,可能会出现查询结果中包含的中文字符在返回JSON数据时出现乱码的情况。比如:

@RequestMapping(value = "/getUsers", method = RequestMethod.GET)
@ResponseBody
public List<UserInfo> getUsers() {
    List<UserInfo> userList = userDao.getUserList(); // 从数据库中查询得到用户列表
    return userList;
}

同样可以通过上述的配置方案或者手动设置响应头方案来解决中文字符乱码问题。

本文标题为:详解Spring MVC3返回JSON数据中文乱码问题解决

基础教程推荐