`
Jclick
  • 浏览: 187555 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Jsonplugin的使用

阅读更多

     项目中用到JSON之后,稍不注意就会出现问题,当然,遇到问题最多的情况就是项目集成Hibernate之后,由于Hibernate的懒加载带来的序列化问题。由于JSON的原理是将对象进行序列化,而序列化就是将对象字符串化,由于Hibernate的懒加载,会带来级联,就会导致序列化时将对象级联的对象全部序列化,然后再对级联的级联对象进行序列化,这样很可能就会报错,即使不报错,也会带来问题,本来只想返回前台一个对象的数据,结果返回了N个对象的数据,无疑导致了传输数据的压力。而解决这种问题主要有以下几种方法:

      1.如果项目运用了struts2以及Strus2的jsonplugin,为了避免对不需要的对象进行传输,可以在get方法上加上@Json(serialize=false).这样在传递Json的时候就不会对此对象序列化。同理,如果遇到Hibernate的Entity,则对不需要传输的对象或数据的get方法上加上@Json(serialize=false),就不会对这些进行Json序列化。

      2.第二种方法,就是在Struts2的返回值时候进行添加param标签,具体如下:

 

     

<result type="json"><param name="includeProperties">infoMsg</param></result>

    上述方式为只传递变量为infoMsg的Json字符串。

    

<param name="includeProperties">userList\[\d+\]\.id</param>

    上述为值传递userList集合中包含的对象里的id属性

   

<result type="json"> 
           <param name="includeProperties">imgList\[\d+\]</param>
</result>

    上述为传递imageList

   

<result type="json"><param name="excludeProperties">infoMsg</param></result>

    上述为排除infoMsg

  

<result type="json"> 
           <param name="root">userList\[\d+\]</param>
</result>

   上述为值传递userList的根属性。比如userList有个id属性,则传递时的格式为{id:1},同样如果包传递的是个map,则不传递Map名称,只传递键值对。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics