反序列化的时候出现eof exception_FastJson序列化时候出现了$ref?还不赶紧学习下...
生活随笔
收集整理的這篇文章主要介紹了
反序列化的时候出现eof exception_FastJson序列化时候出现了$ref?还不赶紧学习下...
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近在使用fastjson時候遇到一個問題,后臺的數(shù)據(jù)轉化為json字符串后發(fā)送到前端時候出現(xiàn)了$ref字樣的東西,后來明白了這是引用,下面詳細介紹下。重復引用 循環(huán)引用 全局配置關閉 JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();非全局關閉 JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
一、一個簡單的例子
先來上一段代碼,運行后打印的結果可能出乎意料,代碼如下:
@org.junit.Test public void testFastJson() {Map<String, Object> dataMap = new HashMap<>();List<User> userList1 = new ArrayList<>();List<User> userList2 = new ArrayList<>();for (int i = 0; i < 2; i++) {User user = new User();user.setId(i);userList1.add(user);userList2.add(user);}dataMap.put("userList1", userList1);dataMap.put("userList2", userList2);System.out.println(JSON.toJSONString(dataMap)); }上面代碼運行后打印結果如下:
{"userList1":[{"id":0},{"id":1}],"userList2":[{"$ref":"$.userList1[0]"},{"$ref":"$.userList1[1]"}]}從打印結果可以看到,里面含有了$ref等字符,為什么為這樣呢,這就是引用,在傳輸?shù)臄?shù)據(jù)中出現(xiàn)相同的對象時,fastjson默認開啟引用檢測將相同的對象寫成引用的形式。
二、引用的分類
引用分為兩類,重復引用和循環(huán)引用
指一個對象重復出現(xiàn)多次
指你心里有我,我心里有你(互相引用),這個問題比較嚴重,如果處理不好就會出現(xiàn)StackOverflowError異常
三、如何關閉引用
有兩種方式可以關閉fastjson的引用支持。關閉引用檢測,還能夠提升序列化時的性能。
四、引用的語法
FastJson序列化出現(xiàn)$ref的的解決方案介紹完成了,有問題歡迎留言溝通哦!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的反序列化的时候出现eof exception_FastJson序列化时候出现了$ref?还不赶紧学习下...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 找质数的个数_用Pytho
- 下一篇: alc236黑苹果驱动_台式机黑苹果独显