From acbcd6eacf45c919766c8e6abb1af542bd455b70 Mon Sep 17 00:00:00 2001 From: wangjian963 <15215920+aprilry@user.noreply.gitee.com> Date: Wed, 24 Jun 2026 11:54:26 +0800 Subject: [PATCH] =?UTF-8?q?=20fix:=20=E4=BF=AE=E5=A4=8D=E8=8F=9C=E5=8D=95p?= =?UTF-8?q?arentId=E4=B8=BANULL=E6=97=B6=E8=8E=B7=E5=8F=96=E8=B7=AF?= =?UTF-8?q?=E7=94=B1NPE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 路由构建时 SysMenu.getParentId() 可能返回 NULL(数据库 parent_id 为 NULL), 在 buildMenus/getRouterPath/getComponent/isMenuFrame/isParentView/getChildList 中直接调用 .intValue()/.longValue() 触发自动拆箱 NPE,导致前端路由加载失败。 --- .../system/service/impl/SysMenuServiceImpl.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/healthlink-his-server/core-system/src/main/java/com/core/system/service/impl/SysMenuServiceImpl.java b/healthlink-his-server/core-system/src/main/java/com/core/system/service/impl/SysMenuServiceImpl.java index 9bd3fb7f2..0ab622bf8 100755 --- a/healthlink-his-server/core-system/src/main/java/com/core/system/service/impl/SysMenuServiceImpl.java +++ b/healthlink-his-server/core-system/src/main/java/com/core/system/service/impl/SysMenuServiceImpl.java @@ -176,7 +176,7 @@ public class SysMenuServiceImpl implements ISysMenuService { children.setQuery(menu.getQuery()); childrenList.add(children); router.setChildren(childrenList); - } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) { + } else if ((menu.getParentId() == null || menu.getParentId() == 0) && isInnerLink(menu)) { router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), false, null, menu.getVisible())); router.setPath("/"); List childrenList = new ArrayList(); @@ -524,11 +524,11 @@ public class SysMenuServiceImpl implements ISysMenuService { public String getRouterPath(SysMenu menu) { String routerPath = menu.getPath(); // 内链打开外网方式 - if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { + if (menu.getParentId() != null && menu.getParentId() != 0 && isInnerLink(menu)) { routerPath = innerLinkReplaceEach(routerPath); } // 非外链并且是一级目录(类型为目录) - if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + if ((menu.getParentId() == null || menu.getParentId() == 0) && UserConstants.TYPE_DIR.equals(menu.getMenuType()) && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { routerPath = "/" + menu.getPath(); } @@ -549,7 +549,8 @@ public class SysMenuServiceImpl implements ISysMenuService { String component = UserConstants.LAYOUT; if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { component = menu.getComponent(); - } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 + } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId() != null + && menu.getParentId() != 0 && isInnerLink(menu)) { component = UserConstants.INNER_LINK; } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { @@ -565,7 +566,7 @@ public class SysMenuServiceImpl implements ISysMenuService { * @return 结果 */ public boolean isMenuFrame(SysMenu menu) { - return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + return (menu.getParentId() == null || menu.getParentId() == 0) && UserConstants.TYPE_MENU.equals(menu.getMenuType()) && menu.getIsFrame().equals(UserConstants.NO_FRAME); } @@ -586,7 +587,7 @@ public class SysMenuServiceImpl implements ISysMenuService { * @return 结果 */ public boolean isParentView(SysMenu menu) { - return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + return menu.getParentId() != null && menu.getParentId() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); } /** @@ -634,7 +635,7 @@ public class SysMenuServiceImpl implements ISysMenuService { Iterator it = list.iterator(); while (it.hasNext()) { SysMenu n = (SysMenu)it.next(); - if (n.getParentId().longValue() == t.getMenuId().longValue()) { + if (n.getParentId() != null && n.getParentId().longValue() == t.getMenuId().longValue()) { tlist.add(n); } }