1. 程式人生 > >【SSH框架】生成JSON的兩個典型問題:1.使用jsonlib工具獲取關聯屬性失敗。2.獲取關聯屬性出現遞迴導致獲取JSON失敗。附解決方案

【SSH框架】生成JSON的兩個典型問題:1.使用jsonlib工具獲取關聯屬性失敗。2.獲取關聯屬性出現遞迴導致獲取JSON失敗。附解決方案

問題1原因:hibernate中的物件的關聯屬性預設都是懶載入的,而使用jsonlib這個工具類是通過反射去獲取物件中的關聯屬性的,和我們通過後臺直接獲取的方式不同,通過後臺直接獲取管理屬性會讓hibernate去資料庫中查詢對應的值再初始化,而採用反射獲取是不會進行這個操作的,導致獲取的物件的關聯屬性要麼失敗要麼為空。

問題1解決辦法:用阿里巴巴的fastjson工具類代替jsonlib,就沒有問題了,強烈推薦!當然也可以將物件的關聯屬性的配置檔案設定為lazy="false",即關閉懶載入,不推薦這種做法!

問題2原因:問題2的現象是這樣的,比如我有一個Customer物件,還有個SaleVisit物件,Customer與SaleVisit是一對多的關係,即他們自身都含有對方的關聯屬性,那我用JSON工具類轉換Customer物件的時候,它會去找SaleVisit,而SaleVisit內部又含有Customer,所以又回去找Customer,導致遞迴無限迴圈,最終失敗!

問題2解決方法:第一步,使用fastjson工具類,fastjson預設關聯屬性中找原物件的時候將原物件設為空,轉換成[{"$ref":"$.rows[0]"}]這種格式。第二步,最好是把你不需要的屬性用下面的方式去除。如果是獲取Customer物件,那麼就在他的關聯屬性的java檔案中對應的自身的關聯屬性上新增一行註釋@JSONField(serialize=false)那麼就不會將關聯屬性轉成json。圖示如下:


相關推薦

no