Java实现多级菜单(递归)

java实现三级菜单展示(递归)

获取树状的菜单结构

  @Override
    public List<Menu> findTreeMenu(){
        List<Menu> menus = findAllMenu();  //先获取你想要在哪些菜单范围内搜索
 
   
        List<Menu> rootMenus = new ArrayList<>();
        for (Menu menu : menus) {
        //从最上级菜单开始展示
            if(menu.getPid().equals(0L)){
                rootMenus.add(menu);
            }
        }
 
        for (Menu rootMenu : rootMenus) {
            //把最上级菜单的子菜单获取到,子菜单的子菜单也会获取到(目前是三层,由于是递归调用,100 
           层也没问题)
            List<Menu> child = getChild(rootMenu.getId(), menus);
            rootMenu.setSubMenu(child);
        }
        return rootMenus;
 
    }

获取子菜单方法

/**
     *通过传入当前菜单id,获取当前id的子菜单 且子菜单里也有子菜单及其信息,直到子菜单没有子菜单了,递归结束
     * @param id  当前菜单的id
     * @param menus  要查询的菜单范围
     * @return  该id的子菜单
     */
    private List<Menu> getChild(Long id,List<Menu> menus){
        List<Menu> childList = new ArrayList<>();
        for (Menu menu : menus) {
            if(menu.getPid().equals(id)){
                //当菜单范围内的父id等于传入的id,获取该id的所有子列表
                childList.add(menu);
            }
        }
        for (Menu menu : childList) {
            //当上面循环语句查询不到子菜单,长度为0,自然也就不会递归调用了
            //将该id的子菜单便利,通过递归调用,给每一个子菜单赋值子菜单
            List<Menu> child = getChild(menu.getId(), menus);
            menu.setSubMenu(child);
        }
        if(childList.size()==0){
            //子菜单的长度为0,返回null,null不会被jackson解析
            return  null;
        }
 
        return  childList;
 
    }

实体类如下

 
 
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
 
import java.util.List;
 
@Data
@TableName("t_menu")
@JsonInclude(JsonInclude.Include.NON_NULL)// 不是null的数据才会被携带到返回数据中
public class Menu {
 
    private Long id;
    private String menuname;
    private Long pid;
    private String url;
    @TableField(exist = false)
    private List<Menu> subMenu;
 
}

数据库设计如下

 返回结果

[
    {
        "id": 1,
        "menuname": "B2C销售管理",
        "pid": 0,
        "url": "/qwe",
        "subMenu": [
            {
                "id": 1001,
                "menuname": "订单显示",
                "pid": 1,
                "url": "/fsd",
                "subMenu": [
                    {
                        "id": 1001001,
                        "menuname": "订单添加",
                        "pid": 1001,
                        "url": "/fg"
                    }
                ]
            },
            {
                "id": 1002,
                "menuname": "销售出库单",
                "pid": 1,
                "url": "/gk",
                "subMenu": [
                    {
                        "id": 1002001,
                        "menuname": "销售出库单修改",
                        "pid": 1002,
                        "url": "/gh"
                    }
                ]
            },
            {
                "id": 1003,
                "menuname": "销售退货单",
                "pid": 1,
                "url": "/jmf",
                "subMenu": [
                    {
                        "id": 1003001,
                        "menuname": "销售退货单修改",
                        "pid": 1003,
                        "url": "/il,.j"
                    }
                ]
            },
            {
                "id": 1004,
                "menuname": "网店订单导入",
                "pid": 1,
                "url": "/dh",
                "subMenu": [
                    {
                        "id": 1004001,
                        "menuname": "网店订单导入修改",
                        "pid": 1004,
                        "url": "/gfjnf"
                    }
                ]
            }
        ]
    },
    {
        "id": 2,
        "menuname": "商品与赠品管理",
        "pid": 0,
        "url": "/asd",
        "subMenu": [
            {
                "id": 2001,
                "menuname": "商品管理",
                "pid": 2,
                "url": "/fhj",
                "subMenu": [
                    {
                        "id": 2001001,
                        "menuname": "商品管理添加",
                        "pid": 2001,
                        "url": "/ghj"
                    }
                ]
            },
            {
                "id": 2002,
                "menuname": "商品品牌管理",
                "pid": 2,
                "url": "/dahj",
                "subMenu": [
                    {
                        "id": 2002001,
                        "menuname": " 商品品牌管理添加",
                        "pid": 2002,
                        "url": "/ghkjghkj"
                    }
                ]
            },
            {
                "id": 2003,
                "menuname": "商品类型管理",
                "pid": 2,
                "url": "/drhfjn",
                "subMenu": [
                    {
                        "id": 2003001,
                        "menuname": "商品类型管理添加",
                        "pid": 2003,
                        "url": "/fghf"
                    }
                ]
            },
            {
                "id": 2004,
                "menuname": "赠品管理",
                "pid": 2,
                "url": "/tmkt",
                "subMenu": [
                    {
                        "id": 2004001,
                        "menuname": "添加赠品",
                        "pid": 2004,
                        "url": "/iu"
                    },
                    {
                        "id": 2004002,
                        "menuname": "详情(查询)",
                        "pid": 2004,
                        "url": "/fhg"
                    },
                    {
                        "id": 2004003,
                        "menuname": "修改数量",
                        "pid": 2004,
                        "url": "/kl"
                    },
                    {
                        "id": 2004004,
                        "menuname": "商品转赠品",
                        "pid": 2004,
                        "url": "/goodsToPresent"
                    },
                    {
                        "id": 2004005,
                        "menuname": "赠品转商品",
                        "pid": 2004,
                        "url": "/qwde"
                    },
                    {
                        "id": 2004006,
                        "menuname": "审核",
                        "pid": 2004,
                        "url": "/qwfqwf"
                    }
                ]
            },
            {
                "id": 2005,
                "menuname": "促销活动申请与审批",
                "pid": 2,
                "url": "/gfh",
                "subMenu": [
                    {
                        "id": 2005001,
                        "menuname": "促销活动申请与审批添加",
                        "pid": 2005,
                        "url": "/qwdeq"
                    }
                ]
            },
            {
                "id": 2006,
                "menuname": "价格调整申请与审批",
                "pid": 2,
                "url": "/dhdtf",
                "subMenu": [
                    {
                        "id": 2006001,
                        "menuname": " 价格调整申请与审批添加",
                        "pid": 2006,
                        "url": "/cvbnv"
                    }
                ]
            }
        ]
    },
    {
        "id": 3,
        "menuname": "售后管理",
        "pid": 0,
        "url": "/zxc",
        "subMenu": [
            {
                "id": 3001,
                "menuname": "返厂出入库管理",
                "pid": 3,
                "url": "/fgjnf",
                "subMenu": [
                    {
                        "id": 3001001,
                        "menuname": " 返厂出入库管理添加",
                        "pid": 3001,
                        "url": "/cbvf"
                    }
                ]
            },
            {
                "id": 3002,
                "menuname": "退换货申请管理",
                "pid": 3,
                "url": "/fhtgfh",
                "subMenu": [
                    {
                        "id": 3002001,
                        "menuname": " 退换货申请管理添加",
                        "pid": 3002,
                        "url": "/cvbcv"
                    }
                ]
            },
            {
                "id": 3003,
                "menuname": "申诉管理",
                "pid": 3,
                "url": "/ghmgh",
                "subMenu": [
                    {
                        "id": 3003001,
                        "menuname": "申诉管理添加",
                        "pid": 3003,
                        "url": "/ghk"
                    }
                ]
            }
        ]
    },
    {
        "id": 4,
        "menuname": "系统管理",
        "pid": 0,
        "url": "/rty",
        "subMenu": [
            {
                "id": 4001,
                "menuname": "用户管理(账号管理)",
                "pid": 4,
                "url": "/fgjn",
                "subMenu": [
                    {
                        "id": 4001001,
                        "menuname": "添加用户",
                        "pid": 4001,
                        "url": "lkjh"
                    },
                    {
                        "id": 4001002,
                        "menuname": "用户详情",
                        "pid": 4001,
                        "url": "/userManage"
                    },
                    {
                        "id": 4001003,
                        "menuname": "用户修改",
                        "pid": 4001,
                        "url": "/dfbh"
                    }
                ]
            },
            {
                "id": 4002,
                "menuname": "角色管理(职位管理)",
                "pid": 4,
                "url": "/fgjj",
                "subMenu": [
                    {
                        "id": 4002001,
                        "menuname": "添加角色",
                        "pid": 4002,
                        "url": "/ijughf"
                    },
                    {
                        "id": 4002002,
                        "menuname": "角色详情",
                        "pid": 4002,
                        "url": "/ujyhgfb"
                    },
                    {
                        "id": 4002003,
                        "menuname": "角色修改",
                        "pid": 4002,
                        "url": "/ujyhgf"
                    }
                ]
            },
            {
                "id": 4003,
                "menuname": "权限管理",
                "pid": 4,
                "url": "/fhn",
                "subMenu": [
                    {
                        "id": 4003001,
                        "menuname": "添加权限",
                        "pid": 4003,
                        "url": "/fthgb"
                    },
                    {
                        "id": 4003002,
                        "menuname": "权限相亲",
                        "pid": 4003,
                        "url": "/dfg"
                    },
                    {
                        "id": 4003003,
                        "menuname": "权限修改",
                        "pid": 4003,
                        "url": "/yhkumj"
                    },
                    {
                        "id": 4003004,
                        "menuname": "权限报表",
                        "pid": 4003,
                        "url": "/wazs"
                    }
                ]
            },
            {
                "id": 4004,
                "menuname": "日志管理",
                "pid": 4,
                "url": "/fgngf",
                "subMenu": [
                    {
                        "id": 4004001,
                        "menuname": "用户日志",
                        "pid": 4004,
                        "url": "/logManage"
                    },
                    {
                        "id": 4004002,
                        "menuname": "商品日志",
                        "pid": 4004,
                        "url": "/asf"
                    }
                ]
            }
        ]
    }
]

更多方法

https://blog.csdn.net/xie1016/article/details/123750710

posted @ 2024-05-30 17:13  江南大才子  阅读(361)  评论(0编辑  收藏  举报