Struts2处置json简介及注意事项
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>