FastJson中迴圈引用的問題
問題場景
在公司程式碼中要傳一個複合物件的list集合。在複合物件中的結構是,一個物件引用了另外一個物件。這時候,在Fastjson轉化為json字串的時候出現了問題,原始碼改過了,所以這裡描述一下。有A類,下A類中引用了B類。在A類查詢都B的id,然後根據B的id再次在資料庫中進行查詢。因為測試服中A中的所有ID都是相同的,所以導致查詢出來的B的結果是一樣的。其中的程式碼如下。
if (invoices.getCompanyId() !=null) {
EnterpriseCompany enterpriseCompany = new EnterpriseCompany();
enterpriseCompany = enterpriseCompanyMapper.selectByPrimaryKey(invoices.getCompanyId());
list.add(enterpriseCompany);
}
在這樣的情景下,fastJson會正確解析list中的第一個物件,如果A中引用的值和第一個相同的時候,就會出現問題,具體的內容就不能重現了。
會出現$ref的情況
“$ref”:”..” 上一級
“$ref”:”@” 當前物件,也就是自引用
“$ref”:”$” 根物件
“$ref”:”$.children.0” 基於路徑的引用,相當於root.getChildren().get(0)
解決方案一
JSON.toJSONString(imList,SerializerFeature.DisableCircularReferenceDetect);
解決方案二
在程式碼中拒絕使用複雜物件,在程式碼中使用List<Map>這樣的結構去組裝資料,這樣我感覺才是正確的開啟方式。
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
List<Map<String, Object>> listCompanys = enterpriseCompanyMapper.selectByParam(map);
if (listCompanys.size() ==1) {
Integer id = (Integer) listCompanys.get(0).get("id");
String name = (String) listCompanys.get(0).get("name");
map.put("companyId",id);
List<EnterpriseAccountInvoices> invoicesList =enterpriseAccountInvoicesMapper.getInvoicesListByPage(map);
if (invoicesList.size() > 0) {
for (EnterpriseAccountInvoices invoices : invoicesList) {
Map<String,Object> objectMap =new HashMap<String, Object>(0);
invoices.setDoubleInvoiceMoney(df.format(invoices.getInvoiceMoney() / 100.00));
invoices.setDoubleTaxesMoney(df.format(invoices.getTaxesMoney() / 100.00));
invoices.setTotalMoney(df.format((invoices.getInvoiceMoney() + invoices.getTaxesMoney()) / 100.00));
objectMap.put("invoices",invoices);
objectMap.put("companyName",name);
list.add(objectMap);
}
}
}
這樣的話,想怎麼封裝資料就封裝資料。
相關文章
- 【FastJSON】解決FastJson中“$ref 迴圈引用”的問題ASTJSON
- require()迴圈引用問題UI
- JavaScript 深複製的迴圈引用問題JavaScript
- 怎麼解決引用計數 GC 的迴圈引用問題?GC
- ARC下的block導致的迴圈引用問題解析BloC
- 迴圈引用
- 透過迴圈引用問題來分析Spring原始碼Spring原始碼
- Python迴圈引用是什麼?如何避免迴圈引用?Python
- iOS迴圈引用iOS
- 如何解決使用JSON.stringify時遇到的迴圈引用問題JSON
- 解決迴圈引用
- Unity容器建構函式引數迴圈引用問題及解決Unity函式
- iOS 關於NSTimer的迴圈引用iOS
- Spring如何解決迴圈引用Spring
- 面試題:Spring 的迴圈依賴問題面試題Spring
- 狀態模式中迴圈呼叫子元件時遇到的問題模式元件
- 關於一個迴圈請求與迴圈計時器的問題
- ubuntu出現迴圈登入的問題Ubuntu
- c++類迴圈依賴的問題C++
- ConcurrentHashMap竟然也有死迴圈問題?HashMap
- Block迴圈引用的三種解決方式BloC
- NSTimer迴圈引用的幾種解決方案
- Flask中的迴圈引用/匯入問題演示以及解決方案 | 藍圖的使用與解析 | 藍圖額外用法Flask
- SpringBoot 迴圈引用解決辦法Spring Boot
- [NG] 考古 - HttpInterceptor 迴圈引用錯誤HTTP
- 迴圈中的非同步&&迴圈中的閉包非同步
- 迴圈請求報204問題分析
- 迴圈內臨時變數問題變數
- Linux while 迴圈中使用ssh問題LinuxWhile
- iOS | 用於解決迴圈引用的block timeriOSBloC
- 全域性元件實現遞迴樹,避免迴圈引用元件遞迴
- fastjson字串轉JSON的$ref問題ASTJSON字串
- 使用c#強大的表示式樹實現物件的深克隆之解決迴圈引用的問題C#物件
- Spring的3級快取和迴圈引用的理解Spring快取
- 2.Vue中bootstrap的引用問題Vueboot
- 在ArrayList的迴圈中刪除元素,會不會出現問題?
- 如何在 Swift 中優雅的處理閉包導致的迴圈引用Swift
- 記錄遇到的一個迴圈依賴問題