zoukankan      html  css  js  c++  java
  • SpringMvc返回JSON出现"$.result.currentLevel"

    “$.result.currentLevel”

    问题描述

    使用SpringMvc返回一个json数据的时候,会在产生的结果中出现如下的问题:”$.result.currentLevel”

    {
        "code": 200,
        "msg": "请求成功",
        "result": {
                "currentLevel": {
                "code": "20180417543114",
                "createDate": 1526528076000,
                "growup": 600,
                "icon": "http://192.168.1.128:8080/pic/level-3.png",
                "id": "31feff3a04c84ade99287f862bcfaa9b",
                "isSys": "0",
                "levelName": "王者会员",
                "levelNum": 4,
                "rebate": 5,
                "setid": "c7a29d3f58ea4c6588a471f02fb32cd4",
                "sort": 2
            },
            "maxLevel": {
                "$ref": "$.result.currentLevel"
            },
    
        }
    }

    问题原因

    由于被转换为json的对象存在引用

    java代码:

    
                MembersysLevel entity = new MembersysLevel();
                entity.setCode();
    
                List<MembersysLevel> membersysLevelList = membersysSetService.getLevels(entity);
    
                MembersysLevel currentLevel = new MembersysLevel();
                int currentLevelIndex = 0;
    
                for (int i = 0, size = membersysLevelList.size(); i < size; i++) {
                    MembersysLevel membersysLevel = membersysLevelList.get(i);
    
                    if (resultBqUsers.getLevelId().equals(membersysLevel.getId())) {
                        //
                        currentLevel = membersysLevel;
                        currentLevelIndex = i;
                        break;
                    }
                }
    
                int maxLevelIndex = membersysLevelList.size() - 1;
                MembersysLevel maxLevel = membersysLevelList.get(maxLevelIndex);
    
    
    
    
                //上一个 
                MembersysLevel preMembersysLevel = new MembersysLevel();
    
                // 
                if (currentLevelIndex + 1 < membersysLevelList.size()) {
                    preMembersysLevel = membersysLevelList.get(currentLevelIndex + 1);
                }
    
     return ResultBean.success()
                        .setResult("currentLevel", currentLevel)
                        .setResult("maxLevel", maxLevel)
                        .setResult("preMembersysLevel", preMembersysLevel)
                        .setResult("bqUsers", resultBqUsers);

    解决的办法

    将被引用的对象复制到一个新的地址,然后再去转换为json。即可
    在上述代码中,会出现 maxLevel == currentLevel 这种现象,所以在最后就会出现json串的错误现象。我们可以通过java对象克隆的方式来进行解决。

      MembersysLevel cloneMaxLevel = null;
    
                if (maxLevel == currentLevel) {
                    //如果相等 那么clone
                    cloneMaxLevel = (MembersysLevel) currentLevel.clone();
                }

    水平有限,个人见解,如有错误,欢迎指正。博主QQ:337081267

  • 相关阅读:
    十.总结drf视图
    一.9.多云管理同步服务器
    一.vue 初识
    一.8.django权限管理/drf权限管理
    一.7.服务器之分页和搜索应用
    一.6.序列化应用之服务器同步功能
    一.5.序列化应用之服务器制造厂与型号app功能
    【前端背景UI】鼠标磁性动态蜘蛛网背景源码
    【vue】导入式,使用vue与element UI, 单人开发项目,告别脚手架
    【python后台admin】所有属性显示设置
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154349.html
Copyright © 2011-2022 走看看