码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-10-14 18:14:46      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

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;  
    }

 

运行结果如下图所示:

技术分享


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

标签:

原文地址:http://my.oschina.net/u/1540325/blog/517176

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!