网站建设费用明细,海口专业网站制作策划,人像摄影,重视网站建设#x1f44f;作者简介#xff1a;大家好#xff0c;我是小童#xff0c;Java开发工程师#xff0c;CSDN博客博主#xff0c;Java领域新星创作者 #x1f4d5;系列专栏#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 #x1f4… 作者简介大家好我是小童Java开发工程师CSDN博客博主Java领域新星创作者 系列专栏前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 如果文章知识点有错误的地方请指正和大家一起学习一起进步 如果感觉博主的文章还不错的话请三连支持一下博主哦 博主正在努力完成2023计划中以梦为马扬帆起航2023追梦人 问题起源
最近因为自己在给公司开发新的管理系统参考了开源系统若依中的很多地方尤其是若依系统中的菜单管理角色管理用户管理部分。在学习研究这几个版块时发现一个比较“怪”的现象在若依系统中添加操作通常我们称为add编辑操作通常称为update在其系统中大多数或者至少目前看到的情况均是拆分开的两个独立接口。
例如添加菜单与更新菜单的接口
添加菜单
/*** 新增菜单*/PreAuthorize(ss.hasPermi(system:menu:add))Log(title 菜单管理, businessType BusinessType.INSERT)PostMappingpublic AjaxResult add(Validated RequestBody SysMenu menu){if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))){return AjaxResult.error(新增菜单 menu.getMenuName() 失败菜单名称已存在);}else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) !StringUtils.ishttp(menu.getPath())){return AjaxResult.error(新增菜单 menu.getMenuName() 失败地址必须以http(s)://开头);}menu.setCreateBy(getUsername());return toAjax(menuService.insertMenu(menu));}更新菜单
/*** 修改菜单*/PreAuthorize(ss.hasPermi(system:menu:edit))Log(title 菜单管理, businessType BusinessType.UPDATE)PutMappingpublic AjaxResult edit(Validated RequestBody SysMenu menu){if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))){return AjaxResult.error(修改菜单 menu.getMenuName() 失败菜单名称已存在);}else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) !StringUtils.ishttp(menu.getPath())){return AjaxResult.error(修改菜单 menu.getMenuName() 失败地址必须以http(s)://开头);}else if (menu.getMenuId().equals(menu.getParentId())){return AjaxResult.error(修改菜单 menu.getMenuName() 失败上级菜单不能选择自己);}menu.setUpdateBy(getUsername());return toAjax(menuService.updateMenu(menu));} 又比如添加角色与更新角色的接口
添加角色
/*** 新增角色*/PreAuthorize(ss.hasPermi(system:role:add))Log(title 角色管理, businessType BusinessType.INSERT)PostMappingpublic AjaxResult add(Validated RequestBody SysRole role){if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))){return AjaxResult.error(新增角色 role.getRoleName() 失败角色名称已存在);}else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))){return AjaxResult.error(新增角色 role.getRoleName() 失败角色权限已存在);}role.setCreateBy(getUsername());return toAjax(roleService.insertRole(role));}
更新角色
/*** 修改保存角色*/PreAuthorize(ss.hasPermi(system:role:edit))Log(title 角色管理, businessType BusinessType.UPDATE)PutMappingpublic AjaxResult edit(Validated RequestBody SysRole role){roleService.checkRoleAllowed(role);if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))){return AjaxResult.error(修改角色 role.getRoleName() 失败角色名称已存在);}else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))){return AjaxResult.error(修改角色 role.getRoleName() 失败角色权限已存在);}role.setUpdateBy(getUsername());if (roleService.updateRole(role) 0){// 更新缓存用户权限LoginUser loginUser getLoginUser();if (StringUtils.isNotNull(loginUser.getUser()) !loginUser.getUser().isAdmin()){loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));tokenService.setLoginUser(loginUser);}return AjaxResult.success();}return AjaxResult.error(修改角色 role.getRoleName() 失败请联系管理员);}
在比如用户版块
添加用户
/*** 新增用户*/PreAuthorize(ss.hasPermi(system:user:add))Log(title 用户管理, businessType BusinessType.INSERT)PostMappingpublic AjaxResult add(Validated RequestBody SysUser user){if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))){return AjaxResult.error(新增用户 user.getUserName() 失败登录账号已存在);}else if (StringUtils.isNotEmpty(user.getPhonenumber()) UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))){return AjaxResult.error(新增用户 user.getUserName() 失败手机号码已存在);}else if (StringUtils.isNotEmpty(user.getEmail()) UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))){return AjaxResult.error(新增用户 user.getUserName() 失败邮箱账号已存在);}user.setCreateBy(getUsername());user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));return toAjax(userService.insertUser(user));}
更新用户
/*** 修改用户*/PreAuthorize(ss.hasPermi(system:user:edit))Log(title 用户管理, businessType BusinessType.UPDATE)PutMappingpublic AjaxResult edit(Validated RequestBody SysUser user){userService.checkUserAllowed(user);if (StringUtils.isNotEmpty(user.getPhonenumber()) UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))){return AjaxResult.error(修改用户 user.getUserName() 失败手机号码已存在);}else if (StringUtils.isNotEmpty(user.getEmail()) UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))){return AjaxResult.error(修改用户 user.getUserName() 失败邮箱账号已存在);}user.setUpdateBy(getUsername());return toAjax(userService.updateUser(user));}
猜测其接口拆分的原因
更新接口与添加接口一般都会有很多判断的先决条件如判断数据是否合法包括手机号唯一性邮箱账号唯一性菜单名称唯一性等等这些通常无论更新与添加都是需要判断的。
以菜单接口为例其添加接口判断参数合法性包括菜单名称唯一外链数据合法性
菜单更新接口除判断这两个数据外还需要判断更新时所选择的上级菜单不是自己
另外菜单添加与更新的区别是菜单添加设置的字段为 createBy与 createTime而更新菜单时需要设置的是 updateBy与 updateTime。
更新角色与添加角色的区别在于更新角色时还需要通过SpringSecurity来更新用户的权限数据。
添加用户时需要设置其密码字段而更新用户时则不需要。
我们分析其将接口拆分的主要原因是这样会使得程序逻辑更加的简单清晰而不用每次需要什么操作都额外判断添加与更新问题。 专栏若依框架 关注公众号领取资料。