关于Struts-JSON配置(详解带实例struts2的json数据支持)

关于Struts-JSON的提高开发效率


一、JSON是什么?

:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解

析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C , C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

 

 

二 、struts2对于JSON有什么支持?

:struts2提供了一个struts2-json-plugin.jar 用于支持JSON的使用。当我们在struts2中使用JSON的时候

必须导入struts2-json-plugin.jar

并且需要一下几点:

 

1.<package name="struts2" extends="json-default">

       //必须是继承struts2-json-plugin.jar中struts-plugin.xml文件中的定义的json-default

       /* struts2-json-plugin.jar中struts-plugin.xml配置信息:

         <struts>

         <package name="json-default" extends="struts-default">

                           <result-types>

                           <result-type name="json" class="org.apache.struts2.json.JSONResult"/>

                           </result-types>

                           <interceptors>

                           <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>                                        </interceptors>

           </package>

 

        </struts>

 

       通过配置信息我们可以知道:

          1.json-default其实是继承了struts-default的

          2.定义了一个name为json的返回类型和一个name为json的拦截器 */

 

         2.<action name="*" class="*"><result name="success" type="json"/></action>//我们需要将result

         的 返回类型定义为json

 

三、关于JSON在struts.xml中的一些属性的功能。

 

Java代码   收藏代码
  1. <action name="*"  class="*">  
  2.           
  3.     <result name="success" type="json">  
  4.    <param name=""></param>//关于对JSON的一些定义  
  5.    /*excludeProperties   //代表排除Action中的哪些属性,排除多个属性时,使用逗号进行分隔(即不需要序列化的属性) 
  6.    例:<param name="excludeProperties">age</param>  排除getAge()这个方法 为什么是排除这个方法下面详解 
  7.                      
  8.       includeProperties   //代表包含Action中的哪些属性,包含多个属性是,使用逗号进行分隔(即需要序列化的属性) 
  9.    例:<param name="includeProperties">address</param>包含getAddress()这个方法 为什么是包含这个方法下面详解 
  10.                      
  11.      excludeNullProperties //代表排除Action中属性值为空的字段 
  12.    例:<param name="excludeNullProperties">true</param> 使用true/false 默认为false(即包含属性值为null的字段) 
  13.                      
  14.     root  //代表从哪里开始序列化 
  15.    例:<param name="root">person</param> person对应的可以是一个属性,也可以是一个对象,也可以是一个集合 
  16.      //当在这里定义后,只会将person进行序列化,如果person是一个对象,则会将person对象中所有的getter方法都进行序列化 
  17.                      
  18.     注意:如果相同属性同时定义了excludeProperties和includeProperties 
  19.         那么excludeProperties的优先级要高,因此不对 
  20.     该属性进行序列化 
  21.         */  
  22.     </result>  
  23. </action>  

  四、关于JSON在Action对象中注解的使用。

:对于JSON的注解主要有一下几个属性可以定义
name:指定序列化的时候对应的名称
/*
 
  例:@JSON(name = "myname") 则在客户端接收到的JSON中UserName属性对应的地方为 :
                     {myname:"张三"} 以前的则是{username:"张三"}
     public String getUsername() {
return username;
     }
*/
serialize:对该方法进行序列化  true/false
/*
例:@JSON(serialize=true) 对该方法序列化,如果为false则不进行序列化
public String getUsername() {
return username;
}
*/
deserialize:不对该方法进行序列化  true/false
/*
例:@JSON(deserialize=true) 不对该方法序列化,如果为false则进行序列化
public String getUsername() {
return username;
}
*/
format:设置JSON对该方法的转换方式,一般用于对时间进行转换 
/*
例:@JSON(format="yyyy-MM-dd")  则客户端接收的JSON中date对应的值为:
                                              {date:"2011-10-2"}
public Date getDate() {
return date;
}
*/

 

五、具体的实例:

 

Java代码   收藏代码
  1. Action:  
  2.     package org.viancent.action;  
  3.   
  4.     import java.util.Date;  
  5.     import org.apache.struts2.json.annotations.JSON;  
  6.     import com.opensymphony.xwork2.ActionSupport;  
  7.     public class GetJsonAction extends ActionSupport {  
  8.           
  9.         private String username;  
  10.         private String password;  
  11.         private int age;  
  12.         private Date date;  
  13.   
  14.         @JSON(serialize = false)  
  15.         public String getUsername() {  
  16.             return username;  
  17.         }  
  18.   
  19.         public void setUsername(String username) {  
  20.             this.username = username;  
  21.             }  
  22.           
  23.         @JSON(name="mypassword")  
  24.         public String getPassword() {  
  25.             return password;  
  26.         }  
  27.   
  28.         public void setPassword(String password) {  
  29.             this.password = password;  
  30.         }  
  31.   
  32.         public int getAge() {  
  33.             return age;  
  34.         }  
  35.   
  36.         public void setAge(int age) {  
  37.             this.age = age;  
  38.         }  
  39.           
  40.         @JSON(format="yyyy-MM-dd")  
  41.         public Date getDate() {  
  42.             return date;  
  43.         }  
  44.   
  45.         public void setDate(Date date) {  
  46.             this.date = date;  
  47.         }  
  48.   
  49.         @Override  
  50.         public String execute() throws Exception {  
  51.             this.setDate(new Date());  
  52.             this.setAge(10);  
  53.             this.setPassword("world");  
  54.             this.setUsername("hello");  
  55.             return SUCCESS;  
  56.         }  
  57.     }  

  struts.xml

Java代码   收藏代码
  1. <struts>  
  2.     <package name="struts2"  extends="json-default">  
  3.     //这里一定要继承json-default  
  4.         <action name="getjsons" class="org.viancent.action.GetJsonAction">  
  5.             <result name="success"  type="json">  
  6.             //这里一定要定义type属性为json  
  7.                 <param name="excludeProperties">age</param>       
  8.             //排除getAge()方法            
  9.             </result>  
  10.         </action>  
  11.   
  12.     </package>  
  13. </struts>   

  JSP:

Java代码   收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <head>  
  6.         <script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script>   //使用jquery一定要导入js  
  7.           
  8.                 <script type="text/javascript"> //使用jquery实现异步提交  
  9.                     function getJson() {  
  10.                         $.post(  
  11.                             "/struts2/getjsons.action",{},function(returnedData,status)  
  12.                             {  
  13.                                 if("success"==status)  
  14.                                 {  
  15.                                     alert(returnedData);  
  16.                                 }  
  17.                             }  
  18.                         )  
  19.                     }  
  20.                 </script>  
  21.     </head>  
  22.     <body id="theBody">  
  23.         <input type="button" value="GetJson" onclick="getJson();">  
  24.   
  25.     </body>  
  26. </html>  

  得到的结果为:{"date":"2011-03-21","mypassword":"world"} 

//使用浏览器的bug工具查看 alert(returnedData);弹出来的只是 [object,Object]
//这里我们可以看见password的名称已经改为mypassword了 而设定那么的data属性,名称则没有变
 

你可能感兴趣的:(struts2)