欢迎来到天天文库
浏览记录
ID:36295957
大小:112.50 KB
页数:12页
时间:2019-05-08
《从源代码角度看Struts2返回JSON数据的原理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、从源代码角度看Struts2返回JSON数据的原理日期:2012-01-03来源:杨胜寒分享至:前面一篇文章其实只是介绍了如何在Struts2中返回JSON数据到客户端的具体范例而无关其原理,内容与标题不符惹来标题党嫌疑确实是笔者发文不够严谨,目前已修改标题,与内容匹配。本文将从struts2-json插件的源码角度出发,结合之前的应用范例来说明struts2-json插件返回JSON数据的原理。用winrar打开struts2-json-plugin-xx.jar(笔者使用版本为2.1.8.1),根目录下有一个struts-plu
2、gin.xml,这个文件想必大家都很了解,不做过多介绍了。打开该文件,内容非常简答,如下:
3、前文提到,如果要使用Struts2返回JSON数据到客户端,那么action所在的package必须继承自
4、json-default包,原因就在上边的配置文件中:这里的配置文件指定了该插件的包名为json-default,所以要使用该插件的功能,就必须继承自该包——json-default。上面的配置文件中,配置了两个类:org.apache.struts2.json.JSONResult和org.apache.struts2.json.JSONInterceptor,前者是结果类型,后者是一个拦截器。简单说一下,org.apache.struts2.json.JSONResult负责将action中的“某些”(通过相关参数可以指定,前文
5、已有详述)或action中所有"可获取"(有getter方法的属性或一个有返回值的getter方法的返回值)数据序列化成JSON字符串,然后发送给客户端;org.apache.struts2.json.JSONInterceptor负责拦截客户端到json-default包下的所有请求,并检查客户端提交的数据是否是JSON类型,如果是则根据指定配置来反序列化JSON数据到action中的bean中(说的有点简单,其实该拦截器内部对数据做了很多判断),拦截器不是本文的重点,介绍到此为止。看一张图,或许能够更加清晰明了的说明JSON插件
6、执行的流程:下面重点说说org.apache.struts2.json.JSONResult。首先看一下org.apache.struts2.json.JSONResult源码的核心部分:部分属性privateStringdefaultEncoding="ISO-8859-1";//默认的编码privateListincludeProperties;//被包含的属性的正则表达式,这些属性的值将被序列化为JSON字符串,传送到客户端privateListexcludeProperties;//被排除
7、的属性的正则表达式,这些属性的值在对象序列化时将被忽略privateStringroot;//根对象,即要被序列化的对象,如不指定,将序列化action中所有可被序列化的数据privatebooleanwrapWithComments;//是否包装成注释privatebooleanprefix;//前缀privatebooleanenableGZIP=false;//是否压缩privatebooleanignoreHierarchy=true;//是否忽略层次关系,即是否序列化对象父类中的属性privatebooleanignore
8、Interfaces=true;//是否忽略接口privatebooleanenumAsBean=false;//是否将枚举类型作为一个bean处理privatebooleanexcludeNullProperties=false;/
此文档下载收益归作者所有