首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

Struts2处置json简介及注意事项

2012-12-25 
Struts2处理json简介及注意事项??? include filestruts-admin.xml/include ??? package namedef

Struts2处理json简介及注意事项

    ??? <include file="struts-admin.xml"></include>
    ??? <package name="default" extends="json-default">
    ??????? <action name="person" method="view">
    ??????? <result type="json">
    ?????????? <param name="includeProperties">??????????
    ??????????? person/.name,persoon/.age,person/.gender??????????
    ?????????? </param>??????????
    ??????? </result>
    ??????? </action>
    ??? </package>??????
    </struts>
    利用Struts 2的支持的可配置结果,可以达到过滤器的效果。Action的处理结果配置支持正则表达式。
    但是如果返回的对象是一个数组格式的Json数据。比如peson Bean中有对象persion1...person9,而我只要person1的json数据,
    则可以用如下的正则表达式。
    <struts>
    ??? <constant name="struts.objectFactory" value="spring"/>????
    ??? <include file="struts-admin.xml"></include>
    ??? <package name="default" extends="json-default">
    ??????? <action name="person" method="view">
    ??????? <result type="json">
    ?????????? <param name="includeProperties">??????????
    ??????????? person/[/d+/]/.person1
    ?????????? </param>>??????????
    ??????? </result>
    ??????? </action>
    ??? </package>??????
    </struts>
    excludeProperties拦截器的用法与此类同,如果拦截的仅仅是一个对象,如果拦截掉person Bean的整个对象。
    <struts>
    ??? <constant name="struts.objectFactory" value="spring"/>????
    ??? <include file="struts-admin.xml"></include>
    ??? <package name="default" extends="json-default">
    ??????? <action name="person" method="view">
    ??????? <result type="json">
    ?????????? <param name="excludeProperties">??????????
    ??????????? person
    ?????????? </param>>??????????
    ??????? </result>
    ??????? </action>
    ??? </package>??????
    </struts>

    需要注意的是,如果用JSON插件把返回结果定为JSON。而JSON的原理是在ACTION中的get方法都会序列化,
    所以前面是get的方法只要没指定不序列化,都会执行。
    如果该方法一定要命名为get*(比如实现了什么接口),
    那么可以在该方法的前面加注解声明该方法不做序列化。
    注解的方式为:@JSON(serialize=false)

    除此之外,JSON注释还支持如下几个域:
      serialize:设置是否序列化该属性
      deserialize:设置是否反序列化该属性。
      format:设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。

    ? //使用注释语法来改变该属性序列化后的属性名
     @JSON(name="newName")
     public String getName()
     {
      return this.name;
     }
    需要引入 import com.googlecode.jsonplugin.annotations.JSON;

    或者org.apache.struts2.json.annotations.JSON;

    @JSON(serialize=false)
    public User getUser() {
    ??? return this.User;
    }

    @JSON(format="yyyy-MM-dd")
    public Date getStartDate() {
    ??? return this.startDate;
    }

    ?

    ?

    SONArray:是用于将Java中Array以及Collection转换成Json形式的字符串;
    JSONObject:是将Java中的普通对象以及Map转换成Json形式的字符串;
    JsonConfig:当我们将Java中的对象要转换成Json的时候,需要防止形成环状(比如在一对一等映射关系中),如果你是使用 Hibernate的时候,对于代理对象也是不能转化的,还有就是对于日期的转换也是经常会出错的(如果一定要使用日期,建议使用dwr传输数据)。以上三种情景是在使用Json的时候最容易出错的,幸好JsonConfig帮了我们大忙。使用JsonConfig可以将一个类中包含以上三种类型的属性在将对象转换成Json的时候过滤掉(当然是在客户端不需要那些属性的情况下),同时这样也能减少网络通信的数据量,提升性能。
    result?? 类型? 为json
    有param下如:

    ignoreHierarchy参数:表示是否忽略等级,也就是继承关系,比如:TestAction继承于BaseAction,那么TestAction中返回的json字符串默认是不会包含父类BaseAction的属性值,
    ignoreHierarchy值默认为true,设置为false后会将父类和子类的属性一起返回。
    <result type="json">
    <param name="ignoreHierarchy">false</param>
    </result>

热点排行