打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SpringMVC 生成JSON(一)

本示例基于前面几篇文章的代码。

一、JSON-lib框架,转换JSON

   1、首先要去官方下载json-lib工具包

本示例中使用的是v2.3;json-lib还需要以下依赖包:

jakarta commons-lang 2.5

jakarta commons-beanutils 1.8.0

jakarta commons-collections 3.2.1

jakarta commons-logging 1.1.1

ezmorph 1.0.6

官方网址:http://json-lib.sourceforge.net/

然后在工程中添加如下jar包:

 

如果你还不了解JSON是什么?那么你应该可以看看http://www.json.org/json-zh.html

 

    2、 要转换的JavaBean的代码如下:

      

Java代码  
  1. <span style="">package com.wy.pojo;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /** 
  6.  * User对象必须实现serializable接口,因为放在session中的数据必须是可序列化的。 
  7.  * 否则会出现错误 setAttribute: Non-serializable attribute... 
  8.  * @author Administrator 
  9.  * @version 2011-10-6 
  10.  */  
  11. public class User implements Serializable {  
  12.       
  13.     private static final long serialVersionUID = 1L;  
  14.     private String username;  
  15.     private String password;  
  16.     private int age;  
  17.     private String sex;  
  18.     private String birthday;  
  19.   
  20.     public String getUsername() {  
  21.         return username;  
  22.     }  
  23.   
  24.     public void setUsername(String username) {  
  25.         this.username = username;  
  26.     }  
  27.   
  28.     public String getPassword() {  
  29.         return password;  
  30.     }  
  31.   
  32.     public void setPassword(String password) {  
  33.         this.password = password;  
  34.     }  
  35.   
  36.     public int getAge(){  
  37.         return age;  
  38.     }  
  39.   
  40.     public void setAge(int age){  
  41.         this.age = age;  
  42.     }  
  43.   
  44.     public String getSex() {  
  45.         return sex;  
  46.     }  
  47.   
  48.     public void setSex(String sex) {  
  49.         this.sex = sex;  
  50.     }  
  51.   
  52.     public String getBirthday() {  
  53.         return birthday;  
  54.     }  
  55.   
  56.     public void setBirthday(String birthday) {  
  57.         this.birthday = birthday;  
  58.     }  
  59.   
  60.     @Override  
  61.     public String toString() {  
  62.         // TODO Auto-generated method stub  
  63.         return this.username +"#"+ this.password +"#"+ this.age +"#"+ this.sex +"#"+ this.birthday;  
  64.     }  
  65.   
  66. }  
  67. </span>  

 

3、 新建JsonlibTest测试类,基本代码如下:

 

 

 

Java代码  
  1. package com.wy.junittest;  
  2.   
  3. import org.junit.Before;  
  4. import org.junit.Test;  
  5.   
  6. import com.wy.controller.annotation.EntryOrJsonController;  
  7.   
  8. public class JsonlibTest {  
  9.   
  10.     @Before  
  11.     public void setUp() throws Exception {  
  12.     }  
  13.   
  14.     //@Test  
  15.     public void testEntry2Json() {  
  16.         new EntryOrJsonController().entry2Json();  
  17.     }  
  18.   
  19.     //@Test  
  20.     public void testList2Json() {  
  21.         new EntryOrJsonController().list2Json();  
  22.     }  
  23.       
  24.     //@Test  
  25.     public void testMap2Json() {  
  26.         new EntryOrJsonController().map2Json();  
  27.     }  
  28.       
  29.     //@Test  
  30.     public void testJson2Entry() {  
  31.         new EntryOrJsonController().json2Entry();  
  32.     }  
  33.       
  34.     //@Test  
  35.     public void testJson2MorphDynaBean() {  
  36.         new EntryOrJsonController().json2MorphDynaBean();  
  37.     }  
  38.       
  39.     //@Test  
  40.     public void testJson2Array() {  
  41.         new EntryOrJsonController().json2Array();  
  42.     }  
  43.       
  44.     //@Test  
  45.     public void testJson2List() {  
  46.         new EntryOrJsonController().json2List();  
  47.     }  
  48.       
  49.     //@Test  
  50.     public void testJson2Collection() {  
  51.         new EntryOrJsonController().json2Collection();  
  52.     }  
  53.       
  54.     @Test  
  55.     public void testJson2Map() {  
  56.         new EntryOrJsonController().json2Map();  
  57.     }  
  58. }  

 

 

JSON中重要的对象:JSONObject、JSONArray、JSONSerializer,下面也是围绕着这几个对象来说明问题。

   JSONObject是将Java对象转换成一个json的Object形式。

  JSONArray是将一个Java对象转换成json的Array格式。

  JSONSerializer也一样可以完成将Java对象转换成JSON。

   JSONObject、JSONArray、JSONSerializer不仅可以将Java对象转换成JSON,还可以将JSON转换成Java对象。

 

Java对象序列化成JSON对象

 

  1、 将JavaObject转换吃JSON字符串

   

Java代码  
  1. <span style="color: #4b4b4b;"><span style=""><span style="">/** 
  2.      * 1、 将JavaObject转换成JSON字符串 
  3.      *    JSONObject是将Java对象转换成一个json的Object形式, 
  4.      *    JSONArray是将一个Java对象转换成json的Array格式。  
  5.      *    JSONSerializer是将Java对象转换成一个json。 
  6.      *     
  7.      *    JSONArray、JSONObject、JSONSerializer可以将Java对象转换成JSON,也可将JSON字符串转换成Java对象。 
  8.      */  
  9.     @SuppressWarnings("static-access")  
  10.     public void entry2Json(){  
  11.         user = new User();  
  12.           
  13.         user.setUsername("wy");  
  14.         user.setPassword("321");  
  15.         user.setAge(23);  
  16.         user.setSex("man");  
  17.         user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date()));  
  18.           
  19.         log.info("==============Java Bean >>> JSON Object==================");  
  20.         JSONArray ja = jsonArray.fromObject(user);  
  21.         JSONObject jo = jsonObject.fromObject(user);  
  22.         JSON jsja = jsonSerializer.toJSON(user);  
  23.           
  24.         log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONObject: \r\n"+jo+"\r\n"+"JSONSerializer: \r\n"+jsja);  
  25.           
  26.     }</span></span></span>  

 2、 将JavaList集合转换吃JSON字符串

 

Java代码  
  1. <span style="color: #4b4b4b;"><span style=""><span style="">/** 
  2.      * 2.将JavaList集合转换吃JSON字符串 
  3.      *   如果你是转换List集合,一定得用JSONArray或是JSONSrializer提供的序列化方法。 
  4.      *   如果你用JSONObject.fromObject方法转换List会出现异常, 
  5.      *   通常使用JSONSrializer这个JSON序列化的方法,它会自动识别你传递的对象的类型,然后转换成相应的JSON字符串。   
  6.      */  
  7.     @SuppressWarnings("static-access")  
  8.     public void list2Json(){  
  9.         List<User> userList = new ArrayList<User>();  
  10.         for(int i=0;i<3;i++){  
  11.             user = new User();  
  12.             user.setUsername("wy"+i);  
  13.             user.setPassword("321"+i);  
  14.             user.setAge(23+i);  
  15.             user.setSex("man"+i);  
  16.             user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date())+" "+i);  
  17.               
  18.             userList.add(user);  
  19.         }  
  20.           
  21.         log.info("==============Java List >>> JSON Object==================");  
  22.         JSONArray ja = jsonArray.fromObject(userList);  
  23.         //JSONObject jo = jsonObject.fromObject(userList); +"JSONObject: \r\n"+jo+"\r\n"  
  24.         JSON jsja = jsonSerializer.toJSON(userList);  
  25.           
  26.         log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONSerializer: \r\n"+jsja);  
  27.     }</span></span></span>  

 3、 将Map集合转换成JSON对象

 

Java代码  
  1. /** 
  2.      * 3.将Map集合转换成JSON对象 
  3.      *  
  4.      */  
  5.     @SuppressWarnings("static-access")  
  6.     public void map2Json(){  
  7.         user = new User();  
  8.         user.setUsername("wy");  
  9.         user.setPassword("321");  
  10.         user.setAge(23);  
  11.         user.setSex("man");  
  12.         user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date()));  
  13.           
  14.         Map<String, Object> map = new HashMap<String, Object>();  
  15.         map.put("bool", Boolean.TRUE);  
  16.         map.put("int", 321);  
  17.         map.put("Long", 321.01);  
  18.         map.put("Str", "wy");  
  19.         map.put("array", new String[]{"wy", "321"});  
  20.         map.put("func", "function(i){ return this.arr[i]; }");   
  21.         map.put("user", user);  
  22.           
  23.         log.info("==============Java Map >>> JSON Object==================");  
  24.         JSONArray ja = jsonArray.fromObject(map);  
  25.         JSONObject jo = jsonObject.fromObject(map);  
  26.         JSON jsja = jsonSerializer.toJSON(map);  
  27.           
  28.         log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONObject: \r\n"+jo+"\r\n"+"JSONSerializer: \r\n"+jsja);  
  29.     }  
  30.       

 

 JSON对象反序列化成Java对象

 

   1、 将json字符串转成Java对

 

Java代码  
  1. /** 
  2.      * 4.JSON对象反序列化成Java对象 
  3.      *  
  4.      */  
  5.     public void json2Entry(){  
  6.         log.info("==============JSON Object String >>> Java Bean ==================");  
  7.         jsonObject = JSONObject.fromObject(json);  
  8.         User joUser = (User)JSONObject.toBean(jsonObject, User.class);  
  9.         log.info("JSONObject: \r\n"+joUser.toString());  
  10.     }  

 

2、 将json字符串转换成动态Java对象(MorphDynaBean)

 

Java代码  
  1. /** 
  2.      * 5.将json字符串转换成动态Java对象(MorphDynaBean) 
  3.      *   转换后的对象Object是一个MorphDynaBean的动态JavaBean,通过PropertyUtils可以获得指定的属性的值。 
  4.      */  
  5.     public void json2MorphDynaBean(){  
  6.         log.info("==============JSON Object String >>> Java MorphDynaBean ==================");  
  7.         JSON j = JSONSerializer.toJSON(json);  
  8.         Object obj = JSONSerializer.toJava(j);//MorphDynaBean  
  9.         String userName = null;  
  10.         try {  
  11.             userName = PropertyUtils.getProperty(obj, "username")+"";  
  12.         } catch (IllegalAccessException e) {  
  13.             // TODO Auto-generated catch block  
  14.             e.printStackTrace();  
  15.         } catch (InvocationTargetException e) {  
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace();  
  18.         } catch (NoSuchMethodException e) {  
  19.             // TODO Auto-generated catch block  
  20.             e.printStackTrace();  
  21.         }  
  22.         log.info("JSONSerializer: \r\n"+obj.toString()+" "+userName);  
  23.     }  

 3、 将json字符串转成Java的Array数组

 

Java代码  
  1. /** 
  2.      * 6. 将json字符串转成Java的Array数组 
  3.      *  
  4.      */  
  5.     public void json2Array(){  
  6.         log.info("==============JSON String >>> Java Array ==================");  
  7.         json = "[" + json + "]";  
  8.         jsonArray = JSONArray.fromObject(json);  
  9.         Object[] obj = jsonArray.toArray();  
  10.         User[] user = (User[])JSONArray.toArray(jsonArray, User.class);  
  11.         log.info("JSONArray: \r\n"+obj+" "+obj[0]+"\r\n"+user+" "+user[0]);  
  12.     }  

 

4、 将JSON字符串转成Java的List集合

Java代码  
  1. /** 
  2.      * 7.将JSON字符串转成Java的List集合 
  3.      */  
  4.     public void json2List(){  
  5.         json = "[" + json + "]";  
  6.         log.info("==============JSON Array String >>> Java List ==================");  
  7.         jsonArray = JSONArray.fromObject(json);  
  8.         List<User> user = jsonArray.toList(jsonArray, User.class);  
  9.           
  10.         log.info("JSONArray: \r\n"+user.get(0).toString());  
  11.     }  

 

5、 将json字符串转换成Collection接口

 

Java代码  
  1. /** 
  2.      * 8.将json字符串转换成Collection接口 
  3.      */  
  4.     public void json2Collection(){  
  5.         json = "[" + json + "]";  
  6.         log.info("==============JSON Array String >>> Java Collection ==================");  
  7.         jsonArray = JSONArray.fromObject(json);  
  8.         Collection<User> user = jsonArray.toCollection(jsonArray, User.class);  
  9.         Object[] obj = user.toArray();  
  10.         log.info("JSONArray: \r\n"+user+" "+obj);  
  11.     }  

 

6、 将json字符串转换成Map集合

Java代码  
  1. /** 
  2.      * 9.将json字符串转换成Map集合 
  3.      */  
  4.     public void json2Map(){  
  5.         log.info("==============JSON String >>> Java Map ==================");  
  6.         jsonObject = JSONObject.fromObject(json);  
  7.         Map<String, Class<?>> clazzMap = new HashMap<String, Class<?>>();  
  8.         clazzMap.put("A", User.class);  
  9.         Map<String, ?> mapBean = (Map) JSONObject.toBean(jsonObject, Map.class, clazzMap);  
  10.         log.info("JSONObject "+ mapBean);  
  11.         Set<String> set = mapBean.keySet();  
  12.         Iterator<String> iter = set.iterator();  
  13.         while (iter.hasNext()) {  
  14.             String key = iter.next();  
  15.             log.info("JSONObject "+ key + ":" + mapBean.get(key).toString());  
  16.         }  
  17.     }  

 

将JSON返回到页面

   1、HttpServletResponse

 

Java代码  
  1. /** 
  2.      * 10. 将JSON返回到页面 
  3.      * @param response 
  4.      */  
  5.     public String entry2JSON(){  
  6.         user = new User();  
  7.         user.setUsername("wy");  
  8.         user.setPassword("321");  
  9.         user.setAge(23);  
  10.         user.setSex("man");  
  11.         user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date()));  
  12.           
  13.         log.info("==============Java Bean >>> JSON Object==================");  
  14.         JSONArray ja = jsonArray.fromObject(user);  
  15.         JSONObject jo = jsonObject.fromObject(user);  
  16.         JSON jsja = jsonSerializer.toJSON(user);  
  17.         return jo.toString();  
  18.     }  
  19.       
  20.     /** 
  21.      * 将JSON返回到页面 
  22.      * @param response 
  23.      */  
  24.     /*@RequestMapping(value="/returnJson", method=RequestMethod.GET) 
  25.     public void commonReturnType(HttpServletResponse response){ 
  26.         try { 
  27.             PrintWriter out = response.getWriter(); 
  28.             out.print(new EntryOrJsonController().entry2JSON()); 
  29.             out.flush(); 
  30.             out.close(); 
  31.         } catch (IOException e) { 
  32.             // TODO Auto-generated catch block 
  33.             e.printStackTrace(); 
  34.         } 
  35.     }*/  

 

2、PrintWriter out

 

Java代码  
  1. /** 
  2.      * 将JSON返回到页面 
  3.      * 默认策略生产viewName 
  4.      * @param out 
  5.      */  
  6.     /*@RequestMapping(value="/returnJson", method=RequestMethod.POST) 
  7.     public void commonReturnType(PrintWriter out){//其实也是从HttpServletResponse 通过getWriter()得到out 
  8.         out.print(new EntryOrJsonController().entry2JSON()); 
  9.         out.flush(); 
  10.         out.close(); 
  11.     }*/  

 

3、ModelAndView

 

Java代码  
  1. @RequestMapping(value="/returnJson", method=RequestMethod.GET)  
  2.     public ModelAndView commonReturnType(){  
  3.         ModelAndView mav = new ModelAndView();  
  4.         mav.addObject("json", new EntryOrJsonController().entry2JSON());  
  5.         mav.setViewName("returnJson");  
  6.         return mav;  
  7.     }  

 

4、@ResponseBody

 

Java代码  
  1. /** 
  2.      * 注解  
  3.      * 将JSON返回到页面 
  4.      * 默认策略生产viewName 
  5.      * @return 
  6.      */  
  7.     @ResponseBody  
  8.     @RequestMapping(value="/returnJson", method=RequestMethod.POST)  
  9.     public String commonReturnTypeAnno(){  
  10.         String jsonAnnotation = new EntryOrJsonController().entry2JSON();  
  11.         return jsonAnnotation;  
  12.     }  

 

视图层接受JSON

   returnJson.jsp

 

Html代码  
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <base href="<%=basePath%>">  
  12.       
  13.     <title>JSON输出到页面</title>  
  14.       
  15.     <meta http-equiv="pragma" content="no-cache">  
  16.     <meta http-equiv="cache-control" content="no-cache">  
  17.     <meta http-equiv="expires" content="0">      
  18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  19.     <meta http-equiv="description" content="This is my page">  
  20.     <!-- 
  21.     <link rel="stylesheet" type="text/css" href="styles.css"> 
  22.     -->  
  23.   
  24.   </head>  
  25.     
  26.   <body>  
  27.      JSON输出到页面. <br/>  
  28.      <c:if test="${json != null}">  
  29.                      通过GET方式请求并以ModelAndView返回的JSON: ${json}  
  30.      </c:if>  
  31.      <c:if test="${jsonAnnotation != null}">  
  32.                      完全基于注解返回的JSON: ${jsonAnnotation}  
  33.      </c:if>          
  34.      <form action="<%=path%>/returnJson.do" method="post">  
  35.        <input type="submit" value="提交" />  
  36.      </form>  
  37.   </body>  
  38. </html>  

 

 

附件中是完整的Controller。 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java转JSON串的几种方式
7.2.2 Android JSON数据解析
使用JSON-LIB转换JAVA对象
FastJson--阿里巴巴公司开源的速度最快的Json和对象转换工具
使用HttpClient通过post方式发送json数据
课堂笔记第七周
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服