ztree 树形菜单结构转JSON

以layui侧边栏菜单为例,实现java以json形式返回给前端侧边栏菜单
ztree 树形菜单结构转JSON_第1张图片
前端很常见的侧边栏菜单展示,但是前端有些控件的格式有自己的风格,只要返回标准json就可以进行转换

从数据库结构开始
ztree 树形菜单结构转JSON_第2张图片
常用pid=o或者=null的时候为一级菜单,pid=id的为二级菜单
初步逻辑是
// 采用递归算法实现许可数据查询

		 * 1) 方法自己调用自己
		 * 2) 方法一定要有跳出的逻辑
		 * 3) 方法在调用自身时,传递的参数需要有规律

递归算法所体现的“重复”一般有三个要求

    (1) 每次调用在规模上都有所缩小(通常是减半);
    
    (2) 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
    
    (3) 在问题的规模极小时必须用直接给出解答而不再进行递归调用,
        因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),
        无条件递归调用将会成为死循环而不能正常结束。

方法一:
// 读取许可数据
//全部数据

		List roots = permissionService.queryRootPermission();
		for ( Permission root : roots ) {
			// 查询子节点
			List childPermissions = permissionService.queryChildPermissions(root.getId());
			
			// 查询子节点的子节点
			for ( Permission child : childPermissions ) {
				List childChildPermissions = permissionService.queryChildPermissions(child.getId());

				child.setChildren(childChildPermissions);
			}
			
			// 组合父子节点的关系
			root.setChildren(childPermissions);
		}

方法二

Map permissionMap = new HashMap();
		for ( Permission permission : permissions ) {
			permissionMap.put(permission.getId(), permission);
		}
		for ( Permission permission : permissions ) {
			// 子节点
			Permission child = permission;
			if ( child.getPid() == 0 ) {
				roots.add(permission);
			} else {
				// 父节点
				Permission parent = permissionMap.get(child.getPid());
				// 组合父子节点的关系
				parent.getChildren().add(child);
			}
		}

对于前端特殊格式的json,可以根据需求进行json格式的重组

方法三:
ztree 树形菜单结构转JSON_第3张图片

你可能感兴趣的:(java)