1. 程式人生 > >前後臺分離開發時遇到迴圈引用問題"$ref"

前後臺分離開發時遇到迴圈引用問題"$ref"

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處理的,但是通過這句話都能進行替換,把我們需要的資料還原回來