Struts 2的struts.xml中Return json类型配置详解

配置json类型主要是为了减少返回无用的参数信息。

...
<package name="json" extends="json-default" namespace="/test"> 
    <action name="testByAction" 
            class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByAction"> 
        <result type="json"> 
                <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 --> 
                <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性 --> 
                <param name="root">dataMap</param> <!-- <span style="font-family: Arial, Helvetica, sans-serif;">指只返回该属性值,如true--></span>
                <!-- 指定是否序列化空的属性 --> 
                <param name="excludeNullProperties">true</param> 
                <!-- 这里指定将序列化dataMap中的那些属性 --> 
                <param name="includeProperties"> 
                    user.* 
                </param> 
                <!-- 指定内容类型,默认为application/json,IE浏览器会提示下载 --> 
                <param name="contentType">text/html</param> 
                <!-- 这里指定将要从dataMap中排除那些属性,这些排除的属性将不被序列化,一半不与上边的参数配置同时出现 --> 
                <param name="excludeProperties"> 
                    SUCCESS 
                </param> 
        </result> 
    </action> 
</package>


为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理 action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把 action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、 includeProperties 和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。

总结: action中避免使用get开头的action方法,去掉action中的接口的get方法 为json类型的result配置includeProperties, excludeProperties等参数.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值