在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

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

2017-3-7 12:50| 发布者: zhangjf| 查看: 1498| 评论: 0

摘要: 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题。 Spring版本:3.2.2.RELEASE Jackson JSON版本:2.1.3 解决思路:Controller的方法中直接通过response向网络流写入Strin ...

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

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;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import com.fasterxml.jackson.databind.ObjectMapper; //Jsckson JSON Processer
  8. import java.util.*;
  9. import javax.servlet.ServletOutputStream;
  10. import javax.servlet.http.*;
  11. import java.io.PrintWriter;
  12. import java.nio.charset.Charset;
  13. /**
  14. * Created with IntelliJ IDEA 12.0
  15. * Date: 2013-03-15
  16. * Time: 16:17
  17. */
  18. @Controller
  19. public class HomeController {
  20. @RequestMapping(value="/Home/writeJson", method=RequestMethod.GET)
  21. public void writeJson(HttpServletResponse response)
  22. {
  23. ObjectMapper mapper = new ObjectMapper();
  24. HashMap<String,String> map = new HashMap<String,String>();
  25. map.put("1","张三");
  26. map.put("2","李四");
  27. map.put("3","王五");
  28. map.put("4", "Jackson");
  29. String json = "";
  30. try
  31. {
  32. json = mapper.writeValueAsString(map);
  33. System.out.println(json);
  34. //方案二
  35. ServletOutputStream os = response.getOutputStream(); //获取输出流
  36. os.write(json.getBytes(Charset.forName("GBK"))); //将json数据写入流中
  37. os.flush();
  38. //方案一
  39. response.setCharacterEncoding("UTF-8"); //设置编码格式
  40. response.setContentType("text/html"); //设置数据格式
  41. PrintWriter out = response.getWriter(); //获取写入对象
  42. out.print(json); //将json数据写入流中
  43. out.flush();
  44. }
  45. catch(Exception e)
  46. {
  47. e.printStackTrace();
  48. }
  49. //return "home";
  50. }
  51. }
复制代码

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

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

  1. @RequestMapping(value="/Home/writeJson", method=RequestMethod.GET, produces = "text/html;charset=UTF-8")
  2. @ResponseBody
  3. public Object writeJson(HttpServletResponse response)
  4. {
  5. ObjectMapper mapper = new ObjectMapper();
  6. HashMap<String,String> map = new HashMap<String,String>();
  7. map.put("1","张三");
  8. map.put("2","李四");
  9. map.put("3","王五");
  10. map.put("4", "Jackson");
  11. String json = "";
  12. try
  13. {
  14. json = mapper.writeValueAsString(map);
  15. System.out.println(json);
  16. }
  17. catch(Exception e)
  18. {
  19. e.printStackTrace();
  20. }
  21. return json;
  22. }
复制代码

运行结果如下图所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-4 02:34

Copyright 2015-2025 djqfx

返回顶部