mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 10:57:13 +08:00 
			
		
		
		
	refactor: 优化 springdoc-openapi 对象型参数处理
1.使用 default-flat-param-object 全局设置对象型参数展示形式。此设置是在 springdoc-openapi v1.6.11 版本开始添加的新特性(详情请参阅:https://github.com/springdoc/springdoc-openapi/pull/1805),在此之前,只能在所有需要处理的对象型参数类上使用 @ParameterObject,工作量较大。 2.作者在使用上方这个配置时还遇到了一个 Bug,那就是只要在对象型参数前使用了注解,例如:@Validated PageQuery pageQuery,这个配置就不会生效了。此问题已在 GitHub 提交了相应 issue(详情请参阅:https://github.com/springdoc/springdoc-openapi/issues/2181),并且 springdoc-openapi 社区某个小伙伴儿已在当前最新发布的 v2.1.0 和 v1.7.0 中修复。 注意:由于当前使用的 Knife4j 版本其内部引入的 springdoc-openapi 相关依赖非最新版本,所以为了解决配置不生效问题,暂时将部分对象型参数移除了 @Validated 注解(除了 PageQuery,其他类当前也未实际添加校验,所以直接移除了)。当然如果不想移除的话,也可以从依赖上功夫,即移除 Knife4j 内引入的 springdoc-openapi 相关依赖,然后自行添加 springdoc-openapi 相关依赖并指定最新版本即可。
This commit is contained in:
		| @@ -16,7 +16,10 @@ | ||||
|  | ||||
| package top.charles7c.cnadmin.webapi.controller.common; | ||||
|  | ||||
| import java.util.*; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Optional; | ||||
| import java.util.Set; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import lombok.RequiredArgsConstructor; | ||||
| @@ -25,7 +28,10 @@ import io.swagger.v3.oas.annotations.Operation; | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
|  | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.PathVariable; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
|  | ||||
| import cn.hutool.core.lang.tree.Tree; | ||||
| import cn.hutool.core.util.ClassUtil; | ||||
| @@ -65,21 +71,21 @@ public class CommonController { | ||||
|  | ||||
|     @Operation(summary = "查询部门树", description = "查询树结构的部门列表") | ||||
|     @GetMapping("/tree/dept") | ||||
|     public R<List<Tree<Long>>> listDeptTree(@Validated DeptQuery query, @Validated SortQuery sortQuery) { | ||||
|     public R<List<Tree<Long>>> listDeptTree(DeptQuery query, SortQuery sortQuery) { | ||||
|         List<Tree<Long>> treeList = deptService.tree(query, sortQuery, true); | ||||
|         return R.ok(treeList); | ||||
|     } | ||||
|  | ||||
|     @Operation(summary = "查询菜单树", description = "查询树结构的菜单列表") | ||||
|     @GetMapping("/tree/menu") | ||||
|     public R<List<Tree<Long>>> listMenuTree(@Validated MenuQuery query, @Validated SortQuery sortQuery) { | ||||
|     public R<List<Tree<Long>>> listMenuTree(MenuQuery query, SortQuery sortQuery) { | ||||
|         List<Tree<Long>> treeList = menuService.tree(query, sortQuery, true); | ||||
|         return R.ok(treeList); | ||||
|     } | ||||
|  | ||||
|     @Operation(summary = "查询角色字典", description = "查询角色字典列表") | ||||
|     @GetMapping("/dict/role") | ||||
|     public R<List<LabelValueVO<Long>>> listRoleDict(@Validated RoleQuery query, @Validated SortQuery sortQuery) { | ||||
|     public R<List<LabelValueVO<Long>>> listRoleDict(RoleQuery query, SortQuery sortQuery) { | ||||
|         List<RoleVO> list = roleService.list(query, sortQuery); | ||||
|         List<LabelValueVO<Long>> labelValueVOList = roleService.buildDict(list); | ||||
|         return R.ok(labelValueVOList); | ||||
|   | ||||
| @@ -57,7 +57,7 @@ public class LogController { | ||||
|     @Log(module = "登录日志") | ||||
|     @Operation(summary = "分页查询登录日志列表") | ||||
|     @GetMapping("/login") | ||||
|     public R<PageDataVO<LoginLogVO>> page(@Validated LoginLogQuery query, @Validated PageQuery pageQuery) { | ||||
|     public R<PageDataVO<LoginLogVO>> page(LoginLogQuery query, @Validated PageQuery pageQuery) { | ||||
|         PageDataVO<LoginLogVO> pageDataVO = logService.page(query, pageQuery); | ||||
|         return R.ok(pageDataVO); | ||||
|     } | ||||
| @@ -65,7 +65,7 @@ public class LogController { | ||||
|     @Log(module = "操作日志") | ||||
|     @Operation(summary = "分页查询操作日志列表") | ||||
|     @GetMapping("/operation") | ||||
|     public R<PageDataVO<OperationLogVO>> page(@Validated OperationLogQuery query, @Validated PageQuery pageQuery) { | ||||
|     public R<PageDataVO<OperationLogVO>> page(OperationLogQuery query, @Validated PageQuery pageQuery) { | ||||
|         PageDataVO<OperationLogVO> pageDataVO = logService.page(query, pageQuery); | ||||
|         return R.ok(pageDataVO); | ||||
|     } | ||||
| @@ -73,7 +73,7 @@ public class LogController { | ||||
|     @Log(module = "系统日志") | ||||
|     @Operation(summary = "分页查询系统日志列表") | ||||
|     @GetMapping("/system") | ||||
|     public R<PageDataVO<SystemLogVO>> page(@Validated SystemLogQuery query, @Validated PageQuery pageQuery) { | ||||
|     public R<PageDataVO<SystemLogVO>> page(SystemLogQuery query, @Validated PageQuery pageQuery) { | ||||
|         PageDataVO<SystemLogVO> pageDataVO = logService.page(query, pageQuery); | ||||
|         return R.ok(pageDataVO); | ||||
|     } | ||||
|   | ||||
| @@ -52,7 +52,7 @@ public class OnlineUserController { | ||||
|     @Operation(summary = "分页查询列表") | ||||
|     @SaCheckPermission("monitor:online:user:list") | ||||
|     @GetMapping | ||||
|     public R<PageDataVO<OnlineUserVO>> page(@Validated OnlineUserQuery query, @Validated PageQuery pageQuery) { | ||||
|     public R<PageDataVO<OnlineUserVO>> page(OnlineUserQuery query, @Validated PageQuery pageQuery) { | ||||
|         return R.ok(onlineUserService.page(query, pageQuery)); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -47,6 +47,9 @@ logging: | ||||
|  | ||||
| --- ### 接口文档配置 | ||||
| springdoc: | ||||
|   # 设置对象型参数的展示形式(设为 true 表示将对象型参数平展开,即对象内的属性直接作为参数展示而不是嵌套在对象内,默认为 false) | ||||
|   # 如果不添加该全局配置,可以在需要如此处理的对象参数类上使用 @ParameterObject | ||||
|   default-flat-param-object: true | ||||
|   swagger-ui: | ||||
|     path: /swagger-ui.html | ||||
|     tags-sorter: alpha | ||||
|   | ||||
		Reference in New Issue
	
	Block a user