`
xinklabi
  • 浏览: 1586958 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Struts2处理json简介及注意事项

 
阅读更多
  1. action 中:  
  2.     private  List<Admins> entities;  
  3.     private Admins admin;  
  4.     public  Admins getAdmin() {  
  5.         return  admin;  
  6.     }  
  7.     public  List<Admins> getEntities() {  
  8.         return  entities;  
  9.     }  
  10.     public  String   execute (){  
  11.         AdminsService asi = new AdminsServiceImpl();  
  12.         entities = asi.getObjects(Admins.class);  
  13.         admin  = (Admins) asi.findObjectById(Admins.class, 1);  
  14.     }  
  15.   
  16. 配置文件中的内容为  
  17. 形式1:  
  18. <result type="json" >   
  19.     <param name = "root" ></param>   
  20. </result>  
  21. 测试的结果为:  
  22. {"admin" :  
  23. {"address" : null , "cellPhone" : null , "email" : null , "id" :1, "password" : "ssssssss1" , "realName" : "sss1" , "role" : null , "sex" : null , "userName" : "redarmy1" },  
  24. "entities" :  
  25. [{"address" : null , "cellPhone" : null , "email" : null , "id" :1, "password" : "ssssssss1" , "realName" : "sss1" , "role" : null , "sex" : null , "userName" : "redarmy1" },  
  26. {"address" : null , "cellPhone" : null , "email" : null , "id" :2, "password" : "ssssssss2" , "realName" : "sss2" , "role" : null , "sex" : null , "userName" : "redarmy2" }, { "address" : null , "cellPhone" : null , "email" : null , "id" :6, "password" : "ssssssss6" , "realName" : "sss6" , "role" : null , "sex" : null , "userName" : "redarmy6" },  
  27. {"address" : null , "cellPhone" : null , "email" : null , "id" :7, "password" : "ssssssss7" , "realName" : "sss7" , "role" : null , "sex" : null , "userName" : "redarmy7" },  
  28. {"address" : null , "cellPhone" : null , "email" : null , "id" :8, "password" : "ssssssss8" , "realName" : "sss8" , "role" : null , "sex" : null , "userName" : "redarmy8" },  
  29. {"address" : null , "cellPhone" : null , "email" : null , "id" :9, "password" : "ssssssss9" , "realName" : "sss9" , "role" : null , "sex" : null , "userName" : "redarmy9" },  
  30. {"address" : null , "cellPhone" : null , "email" : null , "id" :3, "password" : "ssssssss3" , "realName" : "sss3" , "role" : null , "sex" : null , "userName" : "redarmy3" },  
  31. {"address" : null , "cellPhone" : null , "email" : null , "id" :4, "password" : "ssssssss4" , "realName" : "sss4" , "role" : null , "sex" : null , "userName" : "redarmy4" },  
  32. {"address" : null , "cellPhone" : null , "email" : null , "id" :5, "password" : "ssssssss5" , "realName" : "sss5" , "role" : null , "sex" : null , "userName" : "redarmy5" }]}  
  33. 因为前面返回的是一个admins对象还有一个集合对象,而且又没有设置要按哪个根节点元素去遍历。所以会把所有的信息都显示出来,返回的不是真正的json数据  
  34.   
  35. 形式2:  
  36. 以entities为根去遍历,所有返回的是真正的json数据,会显示出自动提示效果  
  37. <result type="json" >   
  38.     <param name = "root" >entities</param>   
  39. </result>  
  40.   
  41. 形式3:  
  42. <result type="json" >  
  43.     <param name = "root" >entities,admin</param>  
  44. </result>  
  45. 响应为  
  46. {"address" : null , "cellPhone" : null , "email" : null , "id" :1, "password" : "ssssssss1" , "realName" : "sss1" , "role" : null , "sex" : null , "userName" : "redarmy1" }  
  47. 因为设置了两个根节点,所有第一个根节点会被第二个根节点顶替,会按照第二个参数去设置,但返回的不是真正的json数据,所有不会出现自动提示功能  
  48.   
  49. 形式4:  
  50. <result type="json" >  
  51.     <param name = "includeProperties" >entities</param>  
  52. </result>   
  53. 响应为:  
  54. {"entities" :[]}  
  55. includeProperties会包含参数作为属性,所以查不到内容  
  56.   
  57. 形式5:  
  58. 过滤前List数据实际上是这种格式:entities[0].realName  entities[1].realName等等,下面的正则表达式正是过滤这种格式的数据。
  59. <result type="json" >  
  60.     <param name = "includeProperties" >entities\[\d+\]\.realName</param>   
  61. </result>   
  62. 响应为:  
  63. {"entities" :[{ "realName" : "sss1" },{ "realName" : "sss2" },{ "realName" : "sss6" },{ "realName" : "sss7" },{ "realName" : "sss8" },  
  64. {"realName" : "sss9" },{ "realName" : "sss3" },{ "realName" : "sss4" },{ "realName" : "sss5" }]}  
  65. includeProperties是包含参数作为作为属性,entities\[\d+\]\.realName是以entities作为根节点去遍历下面的realName,返回的不是真正的json数据  
  66.   
  67. 形式6:  
  68. <result type="json" >  
  69.     <param name = "includeProperties" >^entities\[\d+\]\.realName</param>  
  70. </result>  
  71. 响应为:  
  72. {"entities" :[{ "realName" : "sss1" },{ "realName" : "sss2" },{ "realName" : "sss6" },{ "realName" : "sss7" },{ "realName" : "sss8" },  
  73. {"realName" : "sss9" },{ "realName" : "sss3" },{ "realName" : "sss4" },{ "realName" : "sss5" }]}  
  74. ^:匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n'  或  '\r'  之后的位置。  
  75. 原因同上,不过由于list集合的根节点本来就是entities,所有全部匹配 

 

 

JSON(Java Script Object Notation),是一种语言无关的数据交换格式。
JSON插件是Structs 2 的Ajax插件,通过利用JSON插件,开发者可以很方便,灵活的利用Ajax进行开发。
Json是一种轻量级的数据交换格式,JSon插件提供了一种名为json的Action ResultType 。
一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据,
并返回给客户端物理视图的JavaScript。简单的说,JSON插件允许我们在JavaScript中异步的调用Action,
而且Action不需要指定视图来显示Action的信息显示。
而是由JSON插件来负责具体将Action里面具体的信息返回给调用页面。
Json的数据格式可简单如下形式: person = { name: 'Jim',age: 18,gender: 'man'}。
如果action的属性很多,我们想要从Action返回到调用页面的数据。
这个时候配置includeProperties或者excludeProperties拦截器即可。
而这2个拦截器的定义都在struts2的json-default包内,所以要使用该拦截器的包都要继承自json-default。
<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/.name,persoon/.age,person/.gender          
           </param>          
        </result>
        </action>
    </package>      
</struts>
利用Struts 2的支持的可配置结果,可以达到过滤器的效果。Action的处理结果配置支持正则表达式。
但是如果返回的对象是一个数组格式的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>

需要注意的是,如果用JSON插件把返回结果定为JSON。而JSON的原理是在ACTION中的get方法都会序列化,
所以前面是get的方法只要没指定不序列化,都会执行。
如果该方法一定要命名为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;

或者org.apache.struts2.json.annotations.JSON;

@JSON(serialize=false)
public User getUser() {
    return this.User;
}

@JSON(format="yyyy-MM-dd")
public Date getStartDate() {
    return this.startDate;
}

 

 

SONArray:是用于将Java中Array以及Collection转换成Json形式的字符串;
JSONObject:是将Java中的普通对象以及Map转换成Json形式的字符串;
JsonConfig:当我们将Java中的对象要转换成Json的时候,需要防止形成环状(比如在一对一等映射关系中),如果你是使用 Hibernate的时候,对于代理对象也是不能转化的,还有就是对于日期的转换也是经常会出错的(如果一定要使用日期,建议使用dwr传输数据)。以上 三种情景是在使用Json的时候最容易出错的,幸好JsonConfig帮了我们大忙。使用JsonConfig可以将一个类中包含以上三种类型的属性在 将对象转换成Json的时候过滤掉(当然是在客户端不需要那些属性的情况下),同时这样也能减少网络通信的数据量,提升性能。
result   类型  为json
有param下如:

ignoreHierarchy参数:表示是否忽略等级,也就是继承关系,比如:TestAction继承于BaseAction,那么TestAction中返回的json字符串默认是不会包含父类BaseAction的属性值,
ignoreHierarchy值默认为true,设置为false后会将父类和子类的属性一起返回。
<result type="json">
<param name="ignoreHierarchy">false</param>
</result>

分享到:
评论

相关推荐

    struts2+json的使用

    在Struts2中集成JSON,可以方便地将服务器端处理的结果以JSON格式传递给前端,简化数据传输并提高应用性能。 一、Struts2与JSON集成的必要性 在传统的Web开发中,服务器通常返回HTML页面来更新客户端视图。然而,...

    struts2返回json

    ### 注意事项 - 对于复杂类型的对象,Struts2默认可能无法正确序列化。你可能需要自定义序列化器或者使用Gson、Jackson等库进行转换。 - 如果需要排除某些属性不被序列化,可以在Action类上使用`@SkipSerialization`...

    struts2使用json注意事项

    在使用Struts2框架开发Web应用时,JSON(JavaScript Object Notation)作为一种轻量级的数据...理解并掌握这些注意事项,可以帮助开发者更有效地在Struts2框架中利用JSON进行数据交换,提高应用程序的效率和安全性。

    struts2-json-plugin-2.3.8.jar

    Struts2 JSON Plugin是Apache Struts框架的一个重要插件,主要功能是使Struts2能够无缝地处理JSON(JavaScript Object Notation)数据。这个插件极大地增强了Struts2应用程序的可交互性和响应速度,尤其在开发Web...

    json示例下载 +struts2

    6. **安全注意事项**:使用Struts2 JSON时,要注意防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等安全问题。确保在返回JSON数据时不暴露敏感信息,并正确配置过滤器以避免恶意请求。 7. **自定义JSON输出**:...

    使用struts2 和ajax进行传递json数据

    在本场景中,我们将重点讨论如何利用Struts2作为后台处理框架,与前端Ajax通过JSON(JavaScript Object Notation)数据格式进行数据交换。 **Struts2框架** Struts2是一个基于MVC(Model-View-Controller)设计模式...

    struts2+json

    6. **安全注意事项**: 当使用Struts2的JSON插件时,必须注意XSS和CSRF攻击。例如,确保只返回预期的数据,而不是整个HTTP响应,这可以通过配置`param.exclude`来实现。 7. **JSON结果类型配置**: 可以通过`&lt;param&gt;`...

    struts2 json例子 可执行

    7. **安全注意事项**:使用Struts2 JSON时,需注意防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等安全问题。Struts2提供了相关的拦截器和过滤器来增强安全性。 综上所述,"struts2 json例子 可执行"意味着提供了...

    Struts2+jQuery(不用JSON)实现局部刷新

    6. **注意事项**: - 安全性:使用AJAX和局部刷新时,应考虑XSS攻击,确保返回的数据已进行了适当的转义和过滤。 - 缓存:可能需要禁用AJAX请求的缓存,以防止显示过期数据。 - 错误处理:添加错误处理代码,处理...

    JSON+Struts2事例

    本文通过对Struts2项目中JSON与Struts2结合的具体案例进行了详细的分析和解释,不仅介绍了JSON的基础知识和Struts2框架的特点,还重点阐述了如何在Struts2项目中集成使用JSON,包括具体的代码实现细节以及注意事项。...

    struts2全部的jar包

    8. **使用注意事项**: 使用Struts2的全部JAR包时,要注意避免版本不兼容问题,确保所有库的版本一致。同时,正确配置web.xml文件,指定Struts2的过滤器。 9. **最佳实践**: - 为了代码整洁,推荐使用注解配置而...

    JQuery处理JSON课堂示例(Struts1.2).rar

    注意事项** - 确保服务器端返回的JSON数据格式正确,避免出现语法错误。 - 考虑到跨域问题,可能需要在服务器端开启CORS或者使用JSONP。 - 在处理JSON数据时,注意数据安全,避免XSS攻击。 以上就是使用jQuery...

    json 解析所依赖的jar包

    在Java环境中,解析和生成JSON通常需要依赖于特定的库,比如Apache Struts2框架在处理JSON响应时就可能会用到相关的jar包。 Struts2是一个非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java web...

    Android远程访问Struts2服务器程序(用到Json解析数据)

    [Android访问Struts2服务器程序]我发现在网上下载这个源码很困难,我一步步配置成功了,还将具体应该注意的事项都列出来了,很详细,能够运行成功! Android+struts2+JSON形式的手机开发 把本机当作服务器,将Android...

    struts2学习笔记黑马程序员

    - **配置文件**:在Struts2配置文件中指定扩展名为`json-default`的包,以启用JSON处理功能。 - **Action返回类型**:设置Action的结果类型为`json`,Struts2会自动将模型对象转化为JSON字符串。 **案例——商品...

    ajax利用json在struts2.0中的使用

    5. **注意事项**:确保在项目中引入了Struts2 JSON插件的相关依赖,并在web.xml中配置了Struts2的核心过滤器。 总结起来,结合Ajax和JSON在Struts2.0中的应用,可以提高Web应用的交互性和响应速度。通过在后台...

    swfuplaod+struts2实现多文件上传

    SWFUpload 是一款开源的Flash上传组件,...通过上述步骤和注意事项,你可以利用SWFUpload和Struts2构建一个功能强大且安全的多文件上传功能。在实际项目中,根据需求进行适当的定制和优化,以满足用户需求和系统安全。

    struts2入门教程

    - **文件下载**:介绍实现文件下载功能的步骤和注意事项。 #### 十一、视图浅析 - **视图技术**:讨论Struts2与其他视图技术(如JSP、Freemarker)的集成方式。 #### 十二、集成AJAX - **JSON概述**:介绍JSON格式...

Global site tag (gtag.js) - Google Analytics