• 前后台分离开发时遇到循环引用问题"$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处理的,但是通过这句话都能进行替换,把我们需要的数据还原回来

  • 相关阅读:
    Python超简单的HTTP服务器
    浅析python的string.Template
    virtualenv python虚拟环境搭建
    python 爬虫-sohu抓小说
    python RE模块
    linux 修改系统时间
    Linux下查看文件和文件夹大小
    python os模块使用方法
    python文件操作 seek(),tell()
    python encode decode unicode区别及用法
  • 原文地址:https://www.cnblogs.com/yuhuashang-edward/p/10215999.html
Copyright © 2020-2023  润新知