记一次JSON循环依赖的经历

笔者是从配置文件中读取JSON数组数据,类Metadata.class的结构如下:

public class Metadata {
    public String id;

    public String codeNo;

    public String codeName;

    public String parentNo;

    public String description;

    public String state;

    public List<Metadata> subordinates;

}

JSON数据文件menu.json内容:

[
  {
    "codeNo": "01",
    "codeName": "系统设置",
    "description": "系统设置模块",
    "metaState": "01",
    "parentNo": "",
    "subordinates": [
      {
        "codeNo": "0101",
        "codeName": "角色管理",
        "description": "角色管理菜单",
        "metaState": "01",
        "parentNo": "01",
        "subordinates": []
      },
      {
        "codeNo": "0102",
        "codeName": "账号管理",
        "description": "账号管理菜单",
        "metaState": "01",
        "parentNo": "01",
        "subordinates": []
      }
    ]
  },
  {
    "codeNo": "02",
    "codeName": "用户管理",
    "description": "用户管理模块",
    "metaState": "01",
    "parentNo": "",
    "subordinates": [
      {
        "codeNo": "0201",
        "codeName": "论坛用户",
        "description": "论坛用户菜单",
        "metaState": "01",
        "parentNo": "02",
        "subordinates": []
      }
    ]
  },
  {
    "codeNo": "03",
    "codeName": "社区管理",
    "description": "内容管理模块",
    "metaState": "01",
    "parentNo": "",
    "subordinates": [
      {
        "codeNo": "0301",
        "codeName": "帖子管理",
        "description": "帖子管理菜单",
        "metaState": "01",
        "parentNo": "03",
        "subordinates": []
      },
      {
        "codeNo": "0302",
        "codeName": "版块管理",
        "description": "版块管理菜单",
        "metaState": "01",
        "parentNo": "03",
        "subordinates": []
      }
    ]
  }
]

下面重点来了,分别采用两种方式读取:

/** 方式一:菜单列表 **/
    public static final List<Metadata> menuList() {
        return MENU_LIST;
    }
    private static List<Metadata> MENU_LIST;

    static {
        InputStream is = null;
        try {
            is = new ClassPathResource("/menu.json").getInputStream();
            MENU_LIST = JsonUtils.parseArray(ByteUtils.string(is), Metadata.class);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            is.close();
        }
    }
/** 方式二:菜单列表 **/
    public static List<Metadata> menuList() {
        InputStream is = null;
        List<Metadata> menus = null;
        try {
            is = new ClassPathResource("/menu.json").getInputStream();
            menus = JsonUtils.parseArray(ByteUtils.string(is), Metadata.class);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            is.close();
        }
        return menus;
    }

两种当时产生的数据返回给前端时,第一种会产生循环依赖,而第二种则不会!希望在你们的评论中得到答案?

原文地址:https://www.cnblogs.com/NguyenVm/p/9964984.html

时间: 2024-10-15 14:22:27

记一次JSON循环依赖的经历的相关文章

记 suds 模块循环依赖的坑

下面是soa接口调用的核心代码 #! /usr/bin/python # coding:utf-8 from suds.client import Clientdef SoaRequest(wsdl,fnname,data): soaService = Client(wsdl).service soaRep = getattr(soaService,fnname)(data) return soaRep 问题就这样出现了: 我调用一个接口,总是报错,见下图: 之后Debug断点定位到suds模块

在.NET Core中遭遇循环依赖问题&quot;A circular dependency was detected&quot;

今天在将一个项目迁移至ASP.NET Core的过程中遭遇一个循环依赖问题,错误信息如下: A circular dependency was detected for the service of type 'CNBlogs.Application.Interfaces.ITagService' 一开始以为是项目之间的引用关系引起的,在project.json中找来找去,一无所获. 后来从构造函数下手,才发现问题所在. 实现ITagService的类TagService的构造函数是这么定义的:

UWP 记一次WTS 和 UCT翻车经历

原文:UWP 记一次WTS 和 UCT翻车经历 这次翻车,真的,在网上绝对找不到回答的. 只有在WTS的Issues讨论中才找到,哈哈 不过这个应该比较少遇到吧,据我所知,提出Issue那个大胸弟和我都遇到了... 翻车具备的条件如下: 1. 使用了WTS(Windows Template Studio)的What's New Prompt,版本是1.7之前的.我的项目是2017年9月份创建的,版本应该是的.好像1.6当时 2. 添加了UWP Community Toolkit 的 System

小小见解之python循环依赖

a.py from b import b print '---------this is module a.py----------' def a(): print "hello, a" b() a() b.py print '----------this is module b.py----------' def b(): print "hello, b" def c(): print "hello, c" c() from a import

Spring之循环依赖

转:http://my.oschina.net/tryUcatchUfinallyU/blog/287936 概述 如何检测循环依赖 循环依赖如何解决 Spring如何解决循环依赖 主要的几个缓存 主要步骤 Spring不能完全解决的循环依赖问题 面对Spring不能完全解决的现状,我们该如何处理 概述 入职的时候学习spring研究过循环依赖,现在再回顾下,发现啥都忘记了,还是得总结下来,故总结该文. 本文主要解决如下问题: 1.何为循环依赖 2.如何检测循环依赖 3.循环依赖可以如何解决 4

剑指架构师系列-Struts2构造函数的循环依赖注入

Struts2可以完成构造函数的循环依赖注入,来看看Struts2的大师们是怎么做到的吧! 首先定义IBlood与BloodImpl类: public interface IBlood { } public class BloodImpl implements IBlood{ private IPeople people; @Inject public BloodImpl(@Inject IPeople people) { System.out.println("Blood 构造函数被调用.&q

JAVA循环依赖

最近看到一个问题:如果有两个类A和B,A类中有一个B的对象b,B类中有一个A的对象a,那么如何解决这两个类的相互依赖关系呢? 示例代码1 public class Test{ public static void main(String[] args) { B testb = new B(); } } class A{ public B b; public A (){ b = new B(); } public void printB(){ System.out.println("Ab"

Spring源代码解析 ---- 循环依赖

一.循环引用: 1. 定义: 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比方CircularityA引用CircularityB,CircularityB引用CircularityC,CircularityC引用CircularityA.形成一个环状引用关系. 2. 代码演示样例: CircularityA public class CircularityA { private CircularityB circularityB; public CircularityA()

Spring的循环依赖问题

spring容器循环依赖包括构造器循环依赖和setter循环依赖,那Spring容器如何解决循环依赖呢?首先让我们来定义循环引用类: 在Spring中将循环依赖的处理分成了3种情况: 构造器循环依赖 setter循环依赖 prototype范围的依赖处理 构造器循环依赖 通过构造器注入构成的循环依赖,此依赖是无法解决的,只能抛出BeanCurrentlyInCreationException异常表示循环依赖. 如在创建TestA类时,构造器需要TestB类,那将去创建TestB,在创建TestB