前後臺分離開發時遇到迴圈引用問題"$ref"
阿新 • • 發佈:2019-01-03
1. 遇到的問題
{ "errMsg": "", "data": { "baseinfo": { "freeTest": "0", "request": "1", "format": "2", "url": "rttt" }, "backSample": { "backSample": "" }, "errCode": [ {"sid": "2", "orderVal": "2", "wrequired": "g", "code": "mm", "fieldId": "2", "wdefault": "sdf", "codeDesc": "erfrgt", "inOut": "1", "name": "efed", "wdesc": "dfdws","typ": "int" }, { "sid": "1", "orderVal": "2", "wrequired": "g", "code": "dd", "fieldId": "2", "wdefault": "sdf", "codeDesc": "edfd", "inOut": "1","name": "efed", "wdesc": "dfdws", "typ": "int" } ], "params": [ { "$ref": "$.data.errCode[0]" }, { "sid": "2", "orderVal": "1", "wrequired": "d", "code": "mm", "fieldId": "1", "wdefault": "eddf", "codeDesc": "erfrgt", "inOut": "1", "name": "eed", "wdesc": "dfds", "typ": "int" } ] }, "code": "0" }
今天在開發過程中,使用POSTMAN除錯介面時出現以上問題
"$ref": "$.data.errCode[0]"
2. 解決方案
DisableCircularReferenceDetect來禁止迴圈引用檢測:
JSON.toJSONString(..., SerializerFeature.DisableCircularReferenceDetect)
採用的一個物件,整個list列表中每個元素有一個物件元素,如果第二個元素中有一個與第一個元素中物件同名的,就會去引用上一個元素的地址,在json前臺解析的時候就不會解析出來相應物件的資料,當進行toJSONString的時候,預設如果重用物件的話,會使用引用的方式進行引用物件。
3. 剖析
引用是用“$ref”來表示的
引用 | 描述 |
"$ref":".." | 上一級 |
"$ref":"@" | 當前物件,也是自引用 |
"$ref":"$" | 根物件 |
"$ref":"$.children.0" | 基於路徑的引用,相當於 root.getChildren().get(0) |
3. 前端解決方案
FastJson.format(data); //data是後臺返回的json資料,裡面有$ref字樣的字串,這是前面所說的fastjson處理的,但是通過這句話都能進行替換,把我們需要的資料還原回來