struts-json的使用:
1.package 需继承 json-default
2. action 设置type="json"
在项目中,可以配置一个 global-result,在需要返回json的action中,return对应的name即可。
一些设置:
a.action中的设置:
1.struts的json支持,默认是通过所有的getXXX() 方法转json,所以在action中,最好不要将 method 命名为getXXX。对于命名为 getXXX的不需要转为json的属性,可以在 get 方法上加注解来忽略该方法。
@JSON(serialize="false")
2.对于需要重命名的属性,例如action中为 aaa,对应方法为 getAaa(),但我希望转为json后key不要是aaa,而是bbb。同样可以通过get方法上加注解在实现。
@JSON(name="bbb")
3.对日期等值的格式化。当页面需要显示一个日期时,如果直接将Date转为json传到页面,会显示为1700年以来的毫秒数,这显然不是我们想要的,如果将毫秒数在前天转化,实现起来也稍微麻烦一些。struts在这里给我们提供了方便。
@JSON(format=”yyyy-MM-dd“)
b.struts.xml中的配置
在struts.xml中配置,可以避免污染代码,在适当的情况下,也是很好的选择。
<result name="json" type="json">
<param name="wrapPrefix">/*</param>
<param name="wrapSuffix">*/</param>
</result>
这里的param 允许的name有:
root 根节点
inclideProperties 包含的属性[逗号分割,正则表达式的形式表示]
execludeProperties 排除的属性[……]
excludeNullProperties 是否排除Null值
igoreHierarchy 是否忽略层级,当为true时,可以同时将super class中有get方法属性一起转换
noCache
更多参数及设置:点击这里
最后来说说我碰到的bug:
我需要将一个datas对象返回到页面,datas 包含一些分页属性,排序属性 和 一个包含数据的List集合。 转换时,分页属性和排序属性都可以正常转,但是返回结果中 list 却全部为 null ,怎么写root 、include 都不行。 最后发现是因为 使用的powerdesigner生成的 bean 对象中的方法有问题。
另一bug,用户列表翻到某些页时内存溢出。跟踪发现因为返回结果总有 用户操作日志 和 用户全选 两个数组内数据量过大而且是对列表是无意义的数据。尝试 serialize=false来禁止序列化,操作日志禁止成功,但 getAuthorities() 仍然被序列化,且getAuthorities() 是spring-security 所需要实现的方法,不能改名。在struts.xml中配置:
<param name="excludeProperties"> <!-- 需要排除的属性 -->
datas\[\d+\]\.password,
datas\[\d+\]\.authorities
</param>
成功过滤多余的属性。