@ResponseBody @PutMapping @ApiOperation("修改") @LogMethod( type = 1, voParamIndex = 0 ) public HttpResult<Boolean> update(@RequestBody @Validated({Update.class}) V e) { if (this.isPermitted("update")) { this.beforSave(e, false); this.baseService.updateById((BasePO)e); return HttpResult.success(true); } else { throw new NotPremissionException(); } } public boolean isPermitted(String permitName) { NotCheckPermission notCheckPermission = (NotCheckPermission)this.getClass().getAnnotation(NotCheckPermission.class); if (Objects.nonNull(notCheckPermission)) { return true; } else { String path = super.getRequest().getServletPath(); String namespace = path.split("/")[2]; boolean bool = StpUtil.hasPermission(namespace + ":" + permitName); if (!bool) { LogNamespace annotation = (LogNamespace)this.getClass().getAnnotation(LogNamespace.class); List<String> namespaces = Arrays.asList(annotation.permissions()); Iterator var8 = namespaces.iterator(); while(var8.hasNext()) { String ns = (String)var8.next(); if (StpUtil.hasPermission(ns + ":" + permitName)) { return true; } } } return bool; } }
时间: 2024-02-10 13:34:15 浏览: 85
@ResponseBody 和 @RequestBody 注解的区别
5星 · 资源好评率100%
这段代码是一个Controller的update方法,使用了注解来配置接口的行为。具体注解和对应功能如下:
1. @ResponseBody:用于将返回值转换为JSON格式并返回给客户端。
2. @PutMapping:将HTTP请求映射到更新资源的操作。
3. @ApiOperation:Swagger注解,用于描述接口的功能。
4. @LogMethod:自定义注解,用于记录接口的调用日志。type表示日志类型,voParamIndex表示VO对象在方法参数中的索引位置。
接口的主要逻辑如下:
1. 判断当前用户是否有更新权限,如果没有则抛出NotPremissionException异常。
2. 调用beforSave方法,用于在保存前对VO对象进行处理。
3. 调用baseService.updateById方法,更新数据库中对应的记录。
4. 返回HttpResult.success(true),表示更新成功。
isPermitted方法用于判断当前用户是否有指定权限,具体逻辑如下:
1. 判断当前Controller是否有NotCheckPermission注解,如果有则直接返回true。
2. 获取当前请求的路径,并从中提取出命名空间。
3. 判断当前用户是否有命名空间+权限名称的权限,如果有则返回true。
4. 如果没有,则从LogNamespace注解中获取所有权限名称,并循环判断是否有对应权限,如果有则返回true。
5. 如果以上都没有匹配到,则返回false。
阅读全文