struts2-json-plugin-2.2.3 使用

最近在做struts+ajax+json项目,项目中使用了struts2-json-plugin-2.2.3.jar(一款json转化插件),研究了一段时间,今天来总结一下具体的使用过程。

使用struts2-json-plugin-2.2.3.jar需要理解以下几点:1、struts2-json-plugin-2.2.3.jar就是一个将对象属性转化成json的东东,2、要转化的对象中必须要有get打头的函数才可以(所以,如果使用struts2-json-plugin-2.2.3.jar,尽量避免在要转化的对象中将不想转化json的的函数使用get*打头),不多说了,下面看配置:

1、我的程序目录结构,由于这是一个struts插件,所以必须要有struts才可以。

2、我的java文件:

StudentEntity.java

  1. import java.io.Serializable;  
  2.   
  3.   
  4. public class StudentEntity implements Serializable {  
  5.   
  6.     private String stuName;  
  7.     private String stuAge;  
  8.     private String stuSex;  
  9.     public String getStuAge() {  
  10.         return stuAge;  
  11.     }  
  12.     public void setStuAge(String stuAge) {  
  13.         this.stuAge = stuAge;  
  14.     }  
  15.     public String getStuName() {  
  16.         return stuName;  
  17.     }  
  18.     public void setStuName(String stuName) {  
  19.         this.stuName = stuName;  
  20.     }  
  21.     public String getStuSex() {  
  22.         return stuSex;  
  23.     }  
  24.     public void setStuSex(String stuSex) {  
  25.         this.stuSex = stuSex;  
  26.     }  
  27.       
  28. }  



TeacherEntity.java

  1. import java.io.Serializable;  
  2.   
  3.   
  4. public class TeacherEntity implements Serializable {  
  5.   
  6.     private String teacName;  
  7.     private String teacAge;  
  8.     private String teacSex;  
  9.     public String getTeacAge() {  
  10.         return teacAge;  
  11.     }  
  12.     public void setTeacAge(String teacAge) {  
  13.         this.teacAge = teacAge;  
  14.     }  
  15.     public String getTeacName() {  
  16.         return teacName;  
  17.     }  
  18.     public void setTeacName(String teacName) {  
  19.         this.teacName = teacName;  
  20.     }  
  21.     public String getTeacSex() {  
  22.         return teacSex;  
  23.     }  
  24.     public void setTeacSex(String teacSex) {  
  25.         this.teacSex = teacSex;  
  26.     }  
  27.   
  28. }  


 

StrIndex.java(这是一个action,命名不规范)

  1. import java.util.Date;  
  2.   
  3. import org.apache.struts2.json.annotations.JSON;  
  4.   
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.   
  7. public class StrIndex extends ActionSupport {  
  8.       
  9.     private TeacherEntity teacher=new TeacherEntity();  
  10.     private StudentEntity student=new StudentEntity();  
  11.     private Date nowd=new Date();  
  12.     public String toIndex(){  
  13.         teacher.setTeacName("张三");  
  14.         teacher.setTeacAge("100");  
  15.         teacher.setTeacSex("男男");  
  16.           
  17.         student.setStuName("李老师");  
  18.           
  19.         return SUCCESS;  
  20.     }  
  21.     // 是否转换该对象  
  22. //  @JSON(serialize=true)  
  23. //  @JSON(name="newName")  
  24.     public StudentEntity getStudent() {  
  25.         return student;  
  26.     }  
  27.     public void setStudent(StudentEntity student) {  
  28.         this.student = student;  
  29.     }  
  30.     public TeacherEntity getTeacher() {  
  31.         return teacher;  
  32.     }  
  33.     public void setTeacher(TeacherEntity teacher) {  
  34.         this.teacher = teacher;  
  35.     }  
  36.     @JSON(format="yyyy-MM-dd")  
  37.     public Date getNowd() {  
  38.         return nowd;  
  39.     }  
  40.     public void setNowd(Date nowd) {  
  41.         this.nowd = nowd;  
  42.     }  
  43.       
  44.       
  45.       
  46.       
  47.   
  48. }  

 

紧接着是我的struts配置文件:

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.     <package name="test-default" extends="json-default">  
  7.         <action name="ind" class="StrIndex" method="toIndex">  
  8.             <result name="success" type="json">  
  9.             </result>  
  10.         </action>  
  11.     </package>  
  12. </struts>  


3、简单配置说明

在struts中使用struts2-json-plugin-2.2.3.jar需要将要返回json的action配置在

  1. <package name="test-default" extends="json-default">  
  2.     ...  
  3.     ...  
  4. </package>  

中,注意extends="json-default"继承的是“json-default" 我们正常配置struts是使用‘struts-default’,所以需要将返回json的action和普通action分开使用两个package进行配置

  1. <package name="test-default" extends="json-default">  
  2.     ...  
  3.     ...  
  4. </package>  
  5. <package name="struts-default" extends="struts-default">  
  6.     ...  
  7.     ...  
  8. </package>  

在json package中的acton配置

  1. <result name="success" type="json"></result>  

便可以成功的转化json,结果如

 

[plain] view plain copy
  1. {"nowd":"2012-12-27T22:23:13","student":{"stuAge":null,"stuName":"李老师","stuSex":null},"teacher":{"teacAge":"100","teacName":"张三","teacSex":"男男"}}  


4、拦截器配置

因为json插件的原理是将action中所有以get打头的函数全部转化,包括bena中的bean(如本案例所示,会将action中student中的name以及age等全部转化),如果bean太多这会造成巨大浪费,使用拦截器可以根据需要将bean转化成json。

4.1、配置什么属性转化什么属性,如下配置

  1. <result name="success" type="json">  
  2.     <param name="includeProperties">                 
  3.         teacher\.teacName,teacher\.teacAge  
  4.     </param>  
  5. </result>  


在result中配置param标签,同时为param标签指定includeProperties属性,通过以上配置可以让json插件只转化param配置的属性。结果如

 

[plain] view plain copy
  1. {"teacher":{"teacAge":"100","teacName":"张三"}}  


4.2、只返回指定属性的值,如下配置

  1. <result name="success" type="json">  
  2.     <param name="root">                 
  3.         teacher.teacName         
  4.     </param>  
  5. </result>  


在result中配置param标签,同时为param标签指定root属性,通过以上配置可以让json插件只转化param配置的属性,如

[plain] view plain copy
  1. "张三"  


4.3、不想转化某些对象、属性

  1. <result name="success" type="json">  
  2.     <param name="excludeProperties">                 
  3.         teacher\.teacName  
  4.     </param>  
  5. </result>  


在result中配置param标签,同时为param标签指定excludeProperties属性,通过以上配置可以让json插件不转化param配置的属性,如

[plain] view plain copy
  1. {"nowd":"2012-12-27T22:34:00","student":{"stuAge":null,"stuName":"李老师","stuSex":null},"teacher":{"teacAge":"100","teacSex":"男男"}}  


5、json注解使用

我目前所知道的json插件提供四种注解

serialize:设置是否序列化该属性

  1. @JSON(serialize=true)  
  2. public StudentEntity getStudent() {  
  3.     return student;  
  4. }  



deserialize:设置是否反序列化该属性。

  1. @JSON(deserialize=true)  
  2. public StudentEntity getStudent() {  
  3.     return student;  
  4. }  



format:设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。

  1. @JSON(format="yyyy-MM-dd")  
  2. public Date getNowd() {  
  3.     return nowd;  
  4. }  


 

name:可改变序列后的属性明

  1. @JSON(name="newName")  
  2. public StudentEntity getStudent() {  
  3.     return student;  

原文地址:http://blog.csdn.net/sys8090/article/details/8445430

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值