前后台分离开发时遇到循环引用问题"$ref"

Posted yuhuashang-edward

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前后台分离开发时遇到循环引用问题"$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处理的,但是通过这句话都能进行替换,把我们需要的数据还原回来




以上是关于前后台分离开发时遇到循环引用问题"$ref"的主要内容,如果未能解决你的问题,请参考以下文章

django 前后端分离开发解决跨域问题

不懂前后端分离?这篇就够

解决前后端分离开发,后端重定向不到前端页面问题

解决前后端分离开发,后端重定向不到前端页面问题

记录在一次前后端分离的项目开发中遇到的坑

C#在在一个解决方案里面有俩个项目,引用时说此项目作为引用将导致循环依赖项,怎么解决呀