如果我们要在struts2中使用JSON的功能,需要引入struts2-json-plugin-2.3.4.1.jar,
如果使用注解的方式配置JSON,还需要引入
struts2-convention-plugin-2.3.4.1.jar
commons-io-2.0.1.jar
这两个包
使用注解的方式配置需要注意两点
1.包必须继承 @ParentPackage("json-default")
2.Result(type="json")类型为json,同时location这个属性不能配置,必须使用空,不然会报错。
---------------------------------------------------------------------------------------
几个常用参数的说明:
1.root参数:从返回结果中根据ognl表达式取出你需要输出的结果
JSON默认序列化Action中的所有属性,如果我们只想要个对象格式的json,我们需要传入一个
@Action(value="message",results={ @Result(type="json",params={"root","要输出的属性名称(可以使用ognl表达式操作根对象)"})})
这样我们就可以得到一个这样的结构
{
message:"",
list:[]
map:{}
}
------------------------------------------------------------------------------------------
2. excludeNullProperties 参数:表示是否去掉null值的属性,默认值是false,如果设置为true会自动将为null值属性过滤,
只输出不为null值的属性。
@Action(value="message",results={ @Result(type="json",params={"excludeNullProperties","true"})})
------------------------------------------------------------------------------------------
3. ignoreHierarchy 参数:表示是否忽略等级,也就是继承关系,比如:TestAction继承于BaseAction,那么TestAction中返回的json字符串默认是不会包含父类BaseAction的属性值,
ignoreHierarchy值默认为true,设置为false后会将父类和子类的属性一起输出。
@Action(value="message",results={ @Result(type="json",params={"ignoreHierarchy","true"})})
------------------------------------------------------------------------------------------
4. includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割多个正则表达式。
@Result(name="json",type="json",params={"includeProperties","message,person\\.name,list\\[1\\]\\.age,map.*","prefix","true"})
要注意的是这里非正则表达式的符号,要进行转移,不然ognl表达式不会识别。
------------------------------------------------------------------------------------------
5. excludeProperties 参数:输出结果需要排除的属性值,也支持正则表达式匹配属性名,可以用“,”分割多个正则表达式,同上。
-------------------------------------------------------------------------------------------
@JSON注解
1.默认情况下以get方法开头的都会序列化,如果不想序列化,在action中的方法要打上注解 @JSON(serialize=false)。
2.如果在属性get方法上面加 @JSON(name="newName"),则返回的json数据中key是指定的新名称。
3. @JSON(format ="yyyy-MM-dd'T'HH:mm:ss")设置用于格式化json数据中的日期。
4. @JSON(deserialize=true)设置是否反序列化该属性。
总结常用的注解如下:
Namespace:指定命名空间。
ParentPackage:指定父包。
Result:提供了Action结果的映射。(一个结果的映射)
Results:“Result”注解列表
ResultPath:指定结果页面的基路径。
Action:指定Action的访问URL。
Actions:“Action”注解列表。
ExceptionMapping:指定异常映射。(映射一个声明异常)
ExceptionMappings:一级声明异常的数组。
InterceptorRef:拦截器引用。
InterceptorRefs:拦截器引用组。