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

获取子菜单方法

/**
     *通过传入当前菜单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;

    }

 获取树状的菜单结构

  @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;

    }

利用postman测接口,返回数据如下

[
    {
        "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"
                    }
                ]
            }
        ]
    }
]

实体类设计如下



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;

}

数据库设计如下

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个用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) { // 获取最上级菜单的子菜单,子菜单的子菜单也会获取到 List<Menu> child = getChild(rootMenu.getId(), menus); rootMenu.setSubMenu(child); } return rootMenus; } // 获取子菜单方法 private List<Menu> getChild(Long id, List<Menu> menus) { List<Menu> childList = new ArrayList<>(); for (Menu menu : menus) { if (menu.getPid().equals(id)) { childList.add(menu); } } for (Menu menu : childList) { List<Menu> child = getChild(menu.getId(), menus); menu.setSubMenu(child); } if (childList.size() == 0) { 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) public class Menu { private Long id; private String menuname; private Long pid; private String url; @TableField(exist = false) private List<Menu> subMenu; } ``` 这段代码实现了一个递归三级菜单结构。首先,通过`findTreeMenu()`方法获取根菜单列表。然后,通过`getChild()`方法递归获取每个菜单的子菜单,直到没有子菜单为止。最后,将子菜单列表赋值给每个菜单的`subMenu`属性。实体类`Menu`定义了菜单的属性,包括菜单ID、菜单名称、父菜单ID、URL和子菜单列表。 #### 引用[.reference_title] - *1* *2* *3* [java实现三级菜单展示递归)](https://blog.csdn.net/WoAiXiaoMingMing/article/details/121518156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值