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

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

查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题。

Spring版本:3.2.2.RELEASE

Jackson JSON版本:2.1.3

解决思路:Controller的方法中直接通过response向网络流写入String类型的json数据。

使用 Jackson 的 ObjectMapper 将Java对象转换为String类型的JSON数据。

为了避免中文乱码,需要设置字符编码格式,例如:UTF-8、GBK 等。

代码如下:

  1. import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.stereotype.Controller;  
    import org.springframework.ui.Model;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RequestMethod;  
    import org.springframework.web.bind.annotation.RequestParam;  
      
    import com.fasterxml.jackson.databind.ObjectMapper; //Jsckson JSON Processer  
      
    import java.util.*;  
    import javax.servlet.ServletOutputStream;  
    import javax.servlet.http.*;  
    import java.io.PrintWriter;  
    import java.nio.charset.Charset;  
      
    /** 
     * Created with IntelliJ IDEA 12.0 
     * Date: 2013-03-15 
     * Time: 16:17 
     */  
    @Controller   
    public class HomeController {  
        @RequestMapping(value="/Home/writeJson", method=RequestMethod.GET)  
        public void writeJson(HttpServletResponse response)  
        {  
            ObjectMapper mapper = new ObjectMapper();  
      
            HashMap<String,String> map = new HashMap<String,String>();  
            map.put("1","张三");  
            map.put("2","李四");  
            map.put("3","王五");  
            map.put("4", "Jackson");  
      
            String json = "";  
      
            try  
            {  
                json = mapper.writeValueAsString(map);  
                System.out.println(json);  
      
                //方案二  
                ServletOutputStream os = response.getOutputStream(); //获取输出流  
                os.write(json.getBytes(Charset.forName("GBK"))); //将json数据写入流中  
                os.flush();  
      
                //方案一  
                response.setCharacterEncoding("UTF-8"); //设置编码格式  
                response.setContentType("text/html");   //设置数据格式  
                PrintWriter out = response.getWriter(); //获取写入对象  
                out.print(json); //将json数据写入流中  
                out.flush();  
            }  
            catch(Exception e)  
            {  
                e.printStackTrace();  
            }  
      
            //return "home";  
        }  
    }

还有一种方法:设置 @RequestMapping 的 produces 参数,代码如下所示:

思路:使用 @ResponseBody 注解直接返回json字符串,为了防止中文乱码,将@RequestMapping 的 produces 参数设置成"text/html;charset=UTF-8" 即可。

[java] view plaincopy

  1. @RequestMapping(value="/Home/writeJson", method=RequestMethod.GET, produces = "text/html;charset=UTF-8")  
    @ResponseBody  
    public Object writeJson(HttpServletResponse response)  
    {  
            ObjectMapper mapper = new ObjectMapper();  
      
            HashMap<String,String> map = new HashMap<String,String>();  
            map.put("1","张三");  
            map.put("2","李四");  
            map.put("3","王五");  
            map.put("4", "Jackson");  
      
            String json = "";  
      
            try  
            {  
                json = mapper.writeValueAsString(map);  
                System.out.println(json);  
            }  
            catch(Exception e)  
            {  
                e.printStackTrace();  
            }  
      
            return json;  
    }

运行结果如下图所示:

时间: 2024-08-02 02:47:51

Spring MVC3返回JSON数据中文乱码问题解决的相关文章

Spring MVC3返回JSON数据中文乱码问题解决(转)

Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jackson JSON版本:2.1.3 解决思路:Controller的方法中直接通过response向网络流写入String类型的json数据. 使用 Jackson 的 ObjectMapper 将Java对象转换为String类型的JSON数据. 为了避免中文乱码,需要设置字符编码格式,例如:UTF

Spring MVC返回json数据给Android端

原先做Android项目时,服务端接口一直是别人写的,自己拿来调用一下,但下个项目,接口也要自己搞定了,我想用Spring MVC框架来提供接口,这两天便抽空浅学了一下该框架以及该框架如何返回json数据.在这里边介绍两种个人觉得比较方便的两种方法(PS:其实是我现在只会这两种). 1.直接PrintWriter输出json数据 使用该方法时,可以自己拼凑json字符串,不过我并不赞同使用该方法,毕竟太容易出错了.所以这里我是先构建jsonobject对象,在将该对象打印出来.首先,我们要导入一

spring mvc 返回json数据的三种方式

一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式为{"valid",true}) */ @RequestMapping(value = "/checkNameExistsMethod2", produces = "application/json;charset=UTF-8") //这里的prod

springmvc,通过ajax方式提交页面数据,后台返回json数据中文信息乱码

本人刚开始接触springmvc,项目搭建参照https://my.oschina.net/gaussik/blog/385697.在用IDEA写登录注册的时候,想通过ajax方式提交数据到后台,然后遇到如题所述的乱码问题,然后度娘了好多,终于解决了.废话不多说,直接上代码. 首先是登录页面login.jsp 1 <%-- 2 Created by IntelliJ IDEA. 3 User: PENG027 4 Date: 2016/11/11 5 Time: 15:48 6 To chang

PHP读取mssql,json数据中文乱码

PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. 解决办法: <?php header("Content-Type: text/html;charset=utf-8"); //告诉浏览器不要缓存数据 header("Cache-Control: no-cache"); require "../conn.

Http请求传json数据中文乱码问题

业务场景:调easyui的dialog打开一个弹窗,传参是用json封装的,而且有中文,然后在极速模式是正常的,在ie11测试发现中文出现乱码了 var params = JSON.stringify(writParamList); top.dialog({ id: 'noticeList', title:'列表', width:900, height:500, url:'${root}/notice/multiNoticeList.do?params='+params, onclose:fun

[转]php返回json数据中文显示的问题

转自 : http://blog.csdn.net/superbirds/article/details/8091910 解决方法: [php] view plaincopy <?php function Notice(){ include './include/conn.php';  //数据库链接文件 $sql_notice = mysql_query('SELECT * FROM gg_notice where enable = "1" limit 0,10'); $not

Spring mvc返回JSON数据的两种配置方式

1.视图解析方式 依赖包:jackson-core.jackson-databind.jackson-annotationSpring配置文件内容: <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <property name="defaultContentTy

springmvc 通过@ResponseBody 返回json的中文乱码解决方案2个

1.方法上面的RequestMapping要加上红色的部分.   @ResponseBody     @RequestMapping(value = "/search", produces = {"application/json;charset=UTF-8"})    public String search(HttpServletRequest request, HttpServletResponse response) { 2.推荐方式:在springmvc-