Javaweb開發中JSON把引用相同的對象變爲"$ref":問題的分析與解決

參考文檔來源:https://blog.csdn.net/qq_37953002/article/details/101448761

人吧,工作久了發現自己會的越來越少,現在會的可能還不如剛畢業的時候了。剛畢業時候的幹勁也沒了。誒,要過年了,感慨一下。

最近開發的時候,發現頁面獲取的數據比後臺查到的少了一條,真是奇怪。根本不知道爲什麼啊,就去找原因,後來還是牛逼的同事一語中的,告訴我原因。因爲$ref的問題。具體什麼問題呢,鏈接裏介紹很清楚啊。

就是後臺返回給前端的數據,一般是JSON格式的,然後後臺的數據轉化爲JSON格式的時候,具有相同引用的對象會變成那種"ref":".list[0]",導致前端解析出現錯誤。導致這種問題的有很多,不止鏈接裏說的alibaba.fastjson。

問題重現呢,鏈接裏有。解決方法呢,鏈接也有。因爲我主要用了第二種解決方法,所以就說下第二種吧。

第二種解決方法:深度複製,就是深拷貝,這玩意兒有個前提,就是要被拷貝的類得實現Serializable 接口,而且序列號不能生成什麼1L,得生成唯一的那種。至於爲什麼這樣,因爲我是利用序列化來完成對象的copy。

好了至於具體方法:鏈接有,但是這邊我也放下我的吧。我深拷貝的是個List,鏈接裏是個對象,但是都一樣。

先說下這個利用序列化來完成對象的拷貝,在內存中通過字節流的拷貝是比較容易實現的。把母對象寫入到一個字節流中,再從字節流中將其讀出來,這樣就可以創建一個新的對象了,並且該新對象與母對象之間並不存在引用共享的問題,真正實現對象的深拷貝。(話說這種真麻煩,不如抄襲來得簡單。像這段話,我就直接copy就行了。)

下面是關於list的深度複製

某個對象的深度複製

大概就這樣了。祝大家最近一個月看到這篇的大家新年快樂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章