前言
今天在写前项目时,遇到了处理树形结构,展示菜单的问题,这也是项目中非常常见的需求,之前在学习项目的时候写过一次,今天突发奇想,可不可以使用hutool工具包来创建树形结构呢?于是我就去官网查查了,发现有一个树形结构工具类TreeUtil。看官方文档有点不太懂,于是又去网上看看其他大佬的使用方法,最后我总结了一下。
一、先上代码示例
//返回类型可以直接使用List<Tree<String>>,返回到前端拿到的数据也是map类型,前端可以直接使用
public List<Tree<String>> getAllMenus() {
//首先拿到我们的数据,数据中一定要有id,菜单标题,父亲节点id
List<Menu> menuList = menuMapper.getAllMenus();
//自定义节点配置
TreeNodeConfig nodeConfig = new TreeNodeConfig();
nodeConfig.setIdKey("menu_id");
nodeConfig.setNameKey("title");
nodeConfig.setParentIdKey("parent_id");
//构建树
//四个参数,第一个:构建树的原始数据,第二个:根节点的id
//第三个,自定义节点配置,第四个:返回的数据映射方法
return TreeUtil.build(menuList,"0",nodeConfig,(treeNode,tree)->{
//tree:构建的树 treeNode:原始数据的每个数据
tree.setId(treeNode.getMenuId().toString());
tree.setName(treeNode.getTitle());
tree.setParentId(treeNode.getParentId().toString());
//额外映射的数据(自定义)
tree.putExtra("component",treeNode.getComponent());
tree.putExtra("path",treeNode.getPath());
tree.putExtra("redirect",treeNode.getRedirect());
tree.putExtra("name",treeNode.getName());
tree.putExtra("meta", MapUtil.builder().put("icon",treeNode.getIcon()).put("title",treeNode.getTitle()).map());
tree.putExtra("hidden",treeNode.getHidden());
});
}
返回前端的数据
这是相关的数据库的表