/**
* 获取菜单列表
*/
@PreAuthorize("@ss.hasPermi('system:menu:list')")
@GetMapping("/list")
public AjaxResult list(SysMenu menu)
{
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
Long userId = loginUser.getUser().getUserId();
List<SysMenu> menus = menuService.selectMenuList(menu, userId);
//查询所有菜单
//返回的菜单树
List<SysMenu> rootMenus = new ArrayList<>();
for (SysMenu sysMenu : menus) {
//pid(上级Id)为0的是根菜单
if (0 == sysMenu.getParentId()) {
rootMenus.add(sysMenu);
}
}
//遍历,找到二级菜单(根菜单的id和所有菜单中的pid比较)
for (SysMenu rootMenu : rootMenus) {
List<SysMenu> child = getChild(rootMenu.getMenuId(), menus);
rootMenu.setChildren(child);
}
return AjaxResult.success(rootMenus);
}
/**
* 递归获取下级菜单
* @param pid 上级Id
* @param menus 所有菜单
* @return
*/
private List<SysMenu> getChild(Long pid, List<SysMenu> menus) {
//子菜单列表
List<SysMenu> childList = new ArrayList<>();
for (SysMenu menu : menus) {
if (pid == menu.getParentId()) {
childList.add(menu);
}
}
//遍历 获取子菜单的子菜单
for (SysMenu menu : childList) {
List<SysMenu> child = getChild(menu.getMenuId(), menus);
menu.setChildren(child);
}
//递归出口 childList长度为0
if (childList.size() == 0) {
return new ArrayList<>();
}
return childList;
}
java递归返回菜单树
最新推荐文章于 2024-04-19 17:29:39 发布
该博客展示了如何使用Java进行递归操作,构建系统菜单的树形结构。通过查询所有菜单并找到根节点,然后递归遍历找出二级及更深层级的菜单,将它们组织成树形结构。主要涉及的类包括SysMenu、LoginUser和菜单服务(menuService),使用了Spring Security的权限注解@PreAuthorize进行权限控制。

6552

被折叠的 条评论
为什么被折叠?



