上面的连接是我写这篇博客的初衷!!
在Struts2中,JSON是Structs 2 的默认内置的返回类型之一,如果要让Action返回JSON类型,需要在在package的extends属性修改为json-default,一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据, 并返回给客户端物理视图的JavaScript。 如果action的属性很多,我们只想要从Action一部分或者一类属性到页面, 这个时候通过result节点后面添加出参数includeProperties或excludeProperties即可。includeProperties指定要包含的属性,而excludeProperties是排除属性,这两个属性都可以通过正则表达式来指定属性。
<struts>
<package name="default" extends="json-default">
<action name="person" class="com.person.PersonAction" method="view">
<result type="json">
<param name="includeProperties">
person\.name,persoon\.age,person\.gender
</param>>
</result>
</action>
</package>
</struts>
但是如果返回的对象是一个数组格式的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" class="com.person.PersonAction" 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" class="com.person.PersonAction" method="view">
<result type="json">
<param name="excludeProperties">
person
</param>>
</result>
</action>
</package>
</struts>
出了在配置文件中来指定或者排除属性之外,。JDK1.5以上版本还可以通过Annotation注释来指定或者排除属性。顺便说一句,Action中的属性是通过get方法去封装成JSON的,如果不指定get方法,也就可以排除该属性(不会真有人这么干吧,如果有人这么干,说明你的Action的属性太少,或者说功能不是很多,所哟供你处理的属性也不是很多)在属性的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;
@JSON(serialize=false)
public User getUser() {
return this.User;
}
@JSON(format="yyyy-MM-dd")
public Date getStartDate() {
return this.startDate;
}