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处理的,但是通过这句话都能进行替换,把我们需要的数据还原回来

posted on 2019-01-03 17:59  豫华商  阅读(371)  评论(0编辑  收藏  举报