递归实现菜单列表接口(树形结构的列表实现)
实现页面效果
数据格式
操作步骤
1.首先查出全部数据
2.把这些数据构造成需要的树形结构
代码如下
/**
* 菜单管理
* Author: zmq
* Date: 2024/2/28
*/
@RestController
@RequestMapping("/admin/system/sysMenu")
public class SysMenuController {
@Autowired
private SysMenuService sysMenuService;
//菜单列表
@GetMapping("/findNodes")
public Result findNodes(){
List<SysMenu> list = sysMenuService.findNodes();
return Result.build(list, ResultCodeEnum.SUCCESS);
}
}
/**
* 菜单管理树形列表递归实现
* Author: zmq
* Date: 2024/2/28
*/
@Service
public class SysMenuServiceImpl implements SysMenuService {
@Autowired
private SysMenuMapper sysMenuMapper;
@Override
public List<SysMenu> findNodes() {
// 查询所有菜单的内容,返回list集合
List<SysMenu> sysMenuList = sysMenuMapper.findAll();
if(CollectionUtils.isEmpty(sysMenuList)){
return null;
}
//将查出的菜单列表进行树形结构的构造
List<SysMenu> treeList = new ArrayList<>();
for (SysMenu sysMenu : sysMenuList) {
if(sysMenu.getParentId() == 0){
//找到顶级节点后,递归查询子节点
treeList.add(findChildren(sysMenu,sysMenuList));
}
}
return treeList;
}
//递归的给父节点设置子节点
private SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
//首先给父节点设置空的子节点 否则会空指针异常
sysMenu.setChildren(new ArrayList<>());
for (SysMenu listMenu : sysMenuList) { //遍历菜单列表,直到找不到可以匹配的菜单对象
if(sysMenu.getId().longValue()==listMenu.getParentId()){
List<SysMenu> children = sysMenu.getChildren();
children.add(findChildren(listMenu,sysMenuList));
}
}
return sysMenu;
}
}