Skip to content

Commit ae8d294

Browse files
committed
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 相关依赖并指定最新版本即可。
1 parent 587698b commit ae8d294

File tree

14 files changed

+22
-34
lines changed

14 files changed

+22
-34
lines changed

continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseController.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public abstract class BaseController<S extends BaseService<V, D, Q, C>, V, D, Q,
7575
@Operation(summary = "分页查询列表")
7676
@ResponseBody
7777
@GetMapping
78-
public R<PageDataVO<V>> page(@Validated Q query, @Validated PageQuery pageQuery) {
78+
public R<PageDataVO<V>> page(Q query, @Validated PageQuery pageQuery) {
7979
this.checkPermission("list");
8080
PageDataVO<V> pageDataVO = baseService.page(query, pageQuery);
8181
return R.ok(pageDataVO);
@@ -93,7 +93,7 @@ public R<PageDataVO<V>> page(@Validated Q query, @Validated PageQuery pageQuery)
9393
@Operation(summary = "查询树列表")
9494
@ResponseBody
9595
@GetMapping("/tree")
96-
public R<List<Tree<Long>>> tree(@Validated Q query, @Validated SortQuery sortQuery) {
96+
public R<List<Tree<Long>>> tree(Q query, SortQuery sortQuery) {
9797
this.checkPermission("list");
9898
List<Tree<Long>> list = baseService.tree(query, sortQuery, false);
9999
return R.ok(list);
@@ -111,7 +111,7 @@ public R<List<Tree<Long>>> tree(@Validated Q query, @Validated SortQuery sortQue
111111
@Operation(summary = "查询列表")
112112
@ResponseBody
113113
@GetMapping("/list")
114-
public R<List<V>> list(@Validated Q query, @Validated SortQuery sortQuery) {
114+
public R<List<V>> list(Q query, SortQuery sortQuery) {
115115
this.checkPermission("list");
116116
List<V> list = baseService.list(query, sortQuery);
117117
return R.ok(list);
@@ -197,7 +197,7 @@ public R delete(@PathVariable List<Long> ids) {
197197
*/
198198
@Operation(summary = "导出数据")
199199
@GetMapping("/export")
200-
public void export(@Validated Q query, @Validated SortQuery sortQuery, HttpServletResponse response) {
200+
public void export(Q query, SortQuery sortQuery, HttpServletResponse response) {
201201
this.checkPermission("export");
202202
baseService.export(query, sortQuery, response);
203203
}

continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/query/SortQuery.java

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import io.swagger.v3.oas.annotations.media.Schema;
2626

27-
import org.springdoc.api.annotations.ParameterObject;
2827
import org.springframework.data.domain.Sort;
2928

3029
import cn.hutool.core.util.ArrayUtil;
@@ -39,7 +38,6 @@
3938
* @since 2023/2/12 21:30
4039
*/
4140
@Data
42-
@ParameterObject
4341
@Schema(description = "排序查询条件")
4442
public class SortQuery implements Serializable {
4543

continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/LoginLogQuery.java

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import io.swagger.v3.oas.annotations.media.Schema;
2626

27-
import org.springdoc.api.annotations.ParameterObject;
2827
import org.springframework.format.annotation.DateTimeFormat;
2928

3029
import top.charles7c.cnadmin.common.annotation.Query;
@@ -37,7 +36,6 @@
3736
* @since 2023/1/16 23:25
3837
*/
3938
@Data
40-
@ParameterObject
4139
@Schema(description = "登录日志查询条件")
4240
public class LoginLogQuery implements Serializable {
4341

continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/OperationLogQuery.java

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import io.swagger.v3.oas.annotations.media.Schema;
2626

27-
import org.springdoc.api.annotations.ParameterObject;
2827
import org.springframework.format.annotation.DateTimeFormat;
2928

3029
import top.charles7c.cnadmin.common.annotation.Query;
@@ -37,7 +36,6 @@
3736
* @since 2023/1/15 11:43
3837
*/
3938
@Data
40-
@ParameterObject
4139
@Schema(description = "操作日志查询条件")
4240
public class OperationLogQuery implements Serializable {
4341

continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/SystemLogQuery.java

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import io.swagger.v3.oas.annotations.media.Schema;
2626

27-
import org.springdoc.api.annotations.ParameterObject;
2827
import org.springframework.format.annotation.DateTimeFormat;
2928

3029
import top.charles7c.cnadmin.common.annotation.Query;
@@ -37,7 +36,6 @@
3736
* @since 2023/1/17 23:31
3837
*/
3938
@Data
40-
@ParameterObject
4139
@Schema(description = "系统日志查询条件")
4240
public class SystemLogQuery implements Serializable {
4341

continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/model/query/OnlineUserQuery.java

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import io.swagger.v3.oas.annotations.media.Schema;
2626

27-
import org.springdoc.api.annotations.ParameterObject;
2827
import org.springframework.format.annotation.DateTimeFormat;
2928

3029
import top.charles7c.cnadmin.common.constant.StringConsts;
@@ -36,7 +35,6 @@
3635
* @since 2023/1/20 23:07
3736
*/
3837
@Data
39-
@ParameterObject
4038
@Schema(description = "在线用户查询条件")
4139
public class OnlineUserQuery implements Serializable {
4240

continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/DeptQuery.java

-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
import io.swagger.v3.oas.annotations.media.Schema;
2424

25-
import org.springdoc.api.annotations.ParameterObject;
26-
2725
import top.charles7c.cnadmin.common.annotation.Query;
2826

2927
/**
@@ -33,7 +31,6 @@
3331
* @since 2023/1/22 17:52
3432
*/
3533
@Data
36-
@ParameterObject
3734
@Schema(description = "部门查询条件")
3835
public class DeptQuery implements Serializable {
3936

continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/MenuQuery.java

-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
import io.swagger.v3.oas.annotations.media.Schema;
2424

25-
import org.springdoc.api.annotations.ParameterObject;
26-
2725
import top.charles7c.cnadmin.common.annotation.Query;
2826

2927
/**
@@ -33,7 +31,6 @@
3331
* @since 2023/2/15 20:21
3432
*/
3533
@Data
36-
@ParameterObject
3734
@Schema(description = "菜单查询条件")
3835
public class MenuQuery implements Serializable {
3936

continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/RoleQuery.java

-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
import io.swagger.v3.oas.annotations.media.Schema;
2424

25-
import org.springdoc.api.annotations.ParameterObject;
26-
2725
import top.charles7c.cnadmin.common.annotation.Query;
2826

2927
/**
@@ -33,7 +31,6 @@
3331
* @since 2023/2/8 23:04
3432
*/
3533
@Data
36-
@ParameterObject
3734
@Schema(description = "角色查询条件")
3835
public class RoleQuery implements Serializable {
3936

continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/UserQuery.java

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import io.swagger.v3.oas.annotations.media.Schema;
2626

27-
import org.springdoc.api.annotations.ParameterObject;
2827
import org.springframework.format.annotation.DateTimeFormat;
2928

3029
import top.charles7c.cnadmin.common.annotation.Query;
@@ -37,7 +36,6 @@
3736
* @since 2023/2/20 21:01
3837
*/
3938
@Data
40-
@ParameterObject
4139
@Schema(description = "用户查询条件")
4240
public class UserQuery implements Serializable {
4341

continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/common/CommonController.java

+11-5
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
package top.charles7c.cnadmin.webapi.controller.common;
1818

19-
import java.util.*;
19+
import java.util.Arrays;
20+
import java.util.List;
21+
import java.util.Optional;
22+
import java.util.Set;
2023
import java.util.stream.Collectors;
2124

2225
import lombok.RequiredArgsConstructor;
@@ -25,7 +28,10 @@
2528
import io.swagger.v3.oas.annotations.tags.Tag;
2629

2730
import org.springframework.validation.annotation.Validated;
28-
import org.springframework.web.bind.annotation.*;
31+
import org.springframework.web.bind.annotation.GetMapping;
32+
import org.springframework.web.bind.annotation.PathVariable;
33+
import org.springframework.web.bind.annotation.RequestMapping;
34+
import org.springframework.web.bind.annotation.RestController;
2935

3036
import cn.hutool.core.lang.tree.Tree;
3137
import cn.hutool.core.util.ClassUtil;
@@ -65,21 +71,21 @@ public class CommonController {
6571

6672
@Operation(summary = "查询部门树", description = "查询树结构的部门列表")
6773
@GetMapping("/tree/dept")
68-
public R<List<Tree<Long>>> listDeptTree(@Validated DeptQuery query, @Validated SortQuery sortQuery) {
74+
public R<List<Tree<Long>>> listDeptTree(DeptQuery query, SortQuery sortQuery) {
6975
List<Tree<Long>> treeList = deptService.tree(query, sortQuery, true);
7076
return R.ok(treeList);
7177
}
7278

7379
@Operation(summary = "查询菜单树", description = "查询树结构的菜单列表")
7480
@GetMapping("/tree/menu")
75-
public R<List<Tree<Long>>> listMenuTree(@Validated MenuQuery query, @Validated SortQuery sortQuery) {
81+
public R<List<Tree<Long>>> listMenuTree(MenuQuery query, SortQuery sortQuery) {
7682
List<Tree<Long>> treeList = menuService.tree(query, sortQuery, true);
7783
return R.ok(treeList);
7884
}
7985

8086
@Operation(summary = "查询角色字典", description = "查询角色字典列表")
8187
@GetMapping("/dict/role")
82-
public R<List<LabelValueVO<Long>>> listRoleDict(@Validated RoleQuery query, @Validated SortQuery sortQuery) {
88+
public R<List<LabelValueVO<Long>>> listRoleDict(RoleQuery query, SortQuery sortQuery) {
8389
List<RoleVO> list = roleService.list(query, sortQuery);
8490
List<LabelValueVO<Long>> labelValueVOList = roleService.buildDict(list);
8591
return R.ok(labelValueVOList);

continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/monitor/LogController.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,23 @@ public class LogController {
5757
@Log(module = "登录日志")
5858
@Operation(summary = "分页查询登录日志列表")
5959
@GetMapping("/login")
60-
public R<PageDataVO<LoginLogVO>> page(@Validated LoginLogQuery query, @Validated PageQuery pageQuery) {
60+
public R<PageDataVO<LoginLogVO>> page(LoginLogQuery query, @Validated PageQuery pageQuery) {
6161
PageDataVO<LoginLogVO> pageDataVO = logService.page(query, pageQuery);
6262
return R.ok(pageDataVO);
6363
}
6464

6565
@Log(module = "操作日志")
6666
@Operation(summary = "分页查询操作日志列表")
6767
@GetMapping("/operation")
68-
public R<PageDataVO<OperationLogVO>> page(@Validated OperationLogQuery query, @Validated PageQuery pageQuery) {
68+
public R<PageDataVO<OperationLogVO>> page(OperationLogQuery query, @Validated PageQuery pageQuery) {
6969
PageDataVO<OperationLogVO> pageDataVO = logService.page(query, pageQuery);
7070
return R.ok(pageDataVO);
7171
}
7272

7373
@Log(module = "系统日志")
7474
@Operation(summary = "分页查询系统日志列表")
7575
@GetMapping("/system")
76-
public R<PageDataVO<SystemLogVO>> page(@Validated SystemLogQuery query, @Validated PageQuery pageQuery) {
76+
public R<PageDataVO<SystemLogVO>> page(SystemLogQuery query, @Validated PageQuery pageQuery) {
7777
PageDataVO<SystemLogVO> pageDataVO = logService.page(query, pageQuery);
7878
return R.ok(pageDataVO);
7979
}

continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/monitor/OnlineUserController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class OnlineUserController {
5252
@Operation(summary = "分页查询列表")
5353
@SaCheckPermission("monitor:online:user:list")
5454
@GetMapping
55-
public R<PageDataVO<OnlineUserVO>> page(@Validated OnlineUserQuery query, @Validated PageQuery pageQuery) {
55+
public R<PageDataVO<OnlineUserVO>> page(OnlineUserQuery query, @Validated PageQuery pageQuery) {
5656
return R.ok(onlineUserService.page(query, pageQuery));
5757
}
5858

continew-admin-webapi/src/main/resources/application.yml

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ logging:
4747

4848
--- ### 接口文档配置
4949
springdoc:
50+
# 设置对象型参数的展示形式(设为 true 表示将对象型参数平展开,即对象内的属性直接作为参数展示而不是嵌套在对象内,默认为 false)
51+
# 如果不添加该全局配置,可以在需要如此处理的对象参数类上使用 @ParameterObject
52+
default-flat-param-object: true
5053
swagger-ui:
5154
path: /swagger-ui.html
5255
tags-sorter: alpha

0 commit comments

Comments
 (0)