關於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名稱,只傳遞鍵值對。

發佈了32 篇原創文章 · 獲贊 1 · 訪問量 1271
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章