Skip to content

Commit

Permalink
refactor: 优化 springdoc-openapi 对象型参数处理
Browse files Browse the repository at this point in the history
1.使用 default-flat-param-object 全局设置对象型参数展示形式。此设置是在 springdoc-openapi v1.6.11 版本开始添加的新特性(详情请参阅:springdoc/springdoc-openapi#1805 @ParameterObject,工作量较大。
2.作者在使用上方这个配置时还遇到了一个 Bug,那就是只要在对象型参数前使用了注解,例如:@validated PageQuery pageQuery,这个配置就不会生效了。此问题已在 GitHub 提交了相应 issue(详情请参阅:springdoc/springdoc-openapi#2181 springdoc-openapi 社区某个小伙伴儿已在当前最新发布的 v2.1.0 和 v1.7.0 中修复。
注意:由于当前使用的 Knife4j 版本其内部引入的 springdoc-openapi 相关依赖非最新版本,所以为了解决配置不生效问题,暂时将部分对象型参数移除了 @validated 注解(除了 PageQuery,其他类当前也未实际添加校验,所以直接移除了)。当然如果不想移除的话,也可以从依赖上功夫,即移除 Knife4j 内引入的 springdoc-openapi 相关依赖,然后自行添加 springdoc-openapi 相关依赖并指定最新版本即可。
  • Loading branch information
Charles7c committed Apr 8, 2023
1 parent 587698b commit ae8d294
Show file tree
Hide file tree
Showing 14 changed files with 22 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public abstract class BaseController<S extends BaseService<V, D, Q, C>, V, D, Q,
@Operation(summary = "分页查询列表")
@ResponseBody
@GetMapping
public R<PageDataVO<V>> page(@Validated Q query, @Validated PageQuery pageQuery) {
public R<PageDataVO<V>> page(Q query, @Validated PageQuery pageQuery) {
this.checkPermission("list");
PageDataVO<V> pageDataVO = baseService.page(query, pageQuery);
return R.ok(pageDataVO);
Expand All @@ -93,7 +93,7 @@ public R<PageDataVO<V>> page(@Validated Q query, @Validated PageQuery pageQuery)
@Operation(summary = "查询树列表")
@ResponseBody
@GetMapping("/tree")
public R<List<Tree<Long>>> tree(@Validated Q query, @Validated SortQuery sortQuery) {
public R<List<Tree<Long>>> tree(Q query, SortQuery sortQuery) {
this.checkPermission("list");
List<Tree<Long>> list = baseService.tree(query, sortQuery, false);
return R.ok(list);
Expand All @@ -111,7 +111,7 @@ public R<List<Tree<Long>>> tree(@Validated Q query, @Validated SortQuery sortQue
@Operation(summary = "查询列表")
@ResponseBody
@GetMapping("/list")
public R<List<V>> list(@Validated Q query, @Validated SortQuery sortQuery) {
public R<List<V>> list(Q query, SortQuery sortQuery) {
this.checkPermission("list");
List<V> list = baseService.list(query, sortQuery);
return R.ok(list);
Expand Down Expand Up @@ -197,7 +197,7 @@ public R delete(@PathVariable List<Long> ids) {
*/
@Operation(summary = "导出数据")
@GetMapping("/export")
public void export(@Validated Q query, @Validated SortQuery sortQuery, HttpServletResponse response) {
public void export(Q query, SortQuery sortQuery, HttpServletResponse response) {
this.checkPermission("export");
baseService.export(query, sortQuery, response);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

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

import org.springdoc.api.annotations.ParameterObject;
import org.springframework.data.domain.Sort;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

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

import org.springdoc.api.annotations.ParameterObject;
import org.springframework.format.annotation.DateTimeFormat;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

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

import org.springdoc.api.annotations.ParameterObject;
import org.springframework.format.annotation.DateTimeFormat;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

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

import org.springdoc.api.annotations.ParameterObject;
import org.springframework.format.annotation.DateTimeFormat;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

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

import org.springdoc.api.annotations.ParameterObject;
import org.springframework.format.annotation.DateTimeFormat;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@

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

import org.springdoc.api.annotations.ParameterObject;

import top.charles7c.cnadmin.common.annotation.Query;

/**
Expand All @@ -33,7 +31,6 @@
* @since 2023/1/22 17:52
*/
@Data
@ParameterObject
@Schema(description = "部门查询条件")
public class DeptQuery implements Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@

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

import org.springdoc.api.annotations.ParameterObject;

import top.charles7c.cnadmin.common.annotation.Query;

/**
Expand All @@ -33,7 +31,6 @@
* @since 2023/2/15 20:21
*/
@Data
@ParameterObject
@Schema(description = "菜单查询条件")
public class MenuQuery implements Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@

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

import org.springdoc.api.annotations.ParameterObject;

import top.charles7c.cnadmin.common.annotation.Query;

/**
Expand All @@ -33,7 +31,6 @@
* @since 2023/2/8 23:04
*/
@Data
@ParameterObject
@Schema(description = "角色查询条件")
public class RoleQuery implements Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

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

import org.springdoc.api.annotations.ParameterObject;
import org.springframework.format.annotation.DateTimeFormat;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -25,7 +28,10 @@
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;
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,23 +57,23 @@ 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);
}

@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);
}

@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand Down
3 changes: 3 additions & 0 deletions continew-admin-webapi/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ logging:

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

0 comments on commit ae8d294

Please sign in to comment.