1.先上bug代码:


    \"data\": {
        \"currentPage\": 1,
        \"currentResult\": 0,
        \"entityOrField\": false,
        \"pageListData\": [{
            ..........
            \"isTranspond\": 1,
            \"likesNum\": 0,
            \"mCircleBO\": {
                \"addTime\": \"2018-12-20 11:34:50\",
                \"askId\": 4869476,
                \"circleList\": \"\",
                \"collectAccount\": \"\",
                \"contents\": \"云烟成雨\",
                \"dateStr\": \"14分钟前\",
                \"dynamicAccount\": \"\",
                \"ext1\": \"\",
                \"fansAccount\": \"\",
                \"followAccount\": \"\",
                \"headPhoto\": \"\",
                \"id\": 636,
                \"isDisplay\": 1,
                \"isFavorite\": \"\",
                \"isFollow\": \"\",
                \"isLike\": \"\",
                \"isTranspond\": \"\",
                \"likesNum\": \"\",
                \"mCircleBO\": \"\",
                \"messagesNum\": \"\",
                \"msgAnswerList\": \"\",
                \"originId\": \"\",
                \"pId\": \"\",
                \"page\": \"\",
                \"pmType\": \"\",
                \"postList\": [],
                \"ques \": \"\",
                \"spId\": \"\",
                \"sqName\": \"\",
                \" Name\": \"\",
                \"transpondNum\": \"\",
                \"trueName\": \"\",
                \"userName\": \"vlog\"
            },
            ...........
        }, {
            \"addTime\": \"2018-12-20 11:48:23\",
            \"askId\": 4869466,
            ............
            \"likesNum\": 0,
            \"mCircleBO\": {
                \"$ref\": \"$.data.pageListData[0].mCircleBO\"
            },
            \"messagesNum\": 0,
           ............
            \"userName\": \"xiaoyi\"
        }, 

在上述代码中出现的 \"$ref\": \"$.data.pageListData[0].mCircleBO\"是因为此处的mCircleBO和上面的mCircleBO装配的同一个对象,所以出现了$ref\": \"$.data.pageListData[0].mCircleBO,

百度后知道:

问题分析:
循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。引用是通过$ref标示的,下面介绍一些引用的描述
\"$ref\":\"..\" 上一级
\"$ref\":\"@\" 当前对象,也就是自引用
\"$ref\":\"$\" 根对象
\"$ref\":\"$.children.0\" 基于路径的引用,相当于 root.getChildren().get(0)

知道了后,解决方案:

原先返回格式:

JsonResultUtils.successWithData(\"查询成功\",page);

修改为:

1,JsonResultUtils.successWithData(\"查询成功\",JSON.toJSON(page));
2. JsonResultUtils.successWithData(\"查询成功\",JSON.toJSONString(page,SerializerFeature.DisableCircularReferenceDetect));

其中:1和2都可以解决,我选择的是1,是因为1的返回格式和原来的一样,2的返回格式虽然也是json,但和原来的不一样了

收藏 打印