Swagger3 GET请求使用对象接收 Query 参数,注解怎么写?

SkyLeech lol

问题描述

从 Swagger2 迁移到 Swagger3,遇到一个问题:Swagger3 如何处理 GET 请求的对象参数?

在 Swagger2 中,接口上不需要添加额外的 Swagger 注解,参数类添加 @ApiModel 注解,参数类的字段添加 @ApiModelProperty 注解即可。

1
2
3
4
5
6
7
//Swagger2
@GetMapping("/page")
@ApiOperation("员工分页查询")
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) {
PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);
return Result.success(pageResult);
}

迁移到 Swagger3 后,注解发生了变化,参考对照表修改了注解:

1
2
3
4
5
6
7
8
9
10
11
@Api@Tag
@ApiIgnore@Parameter(hidden = true) or @Operation(hidden = true) or @Hidden
@ApiImplicitParam@Parameter
@ApiImplicitParams@Parameters
@ApiModel@Schema
@ApiModelProperty(hidden = true)@Schema(accessMode = READ_ONLY)
@ApiModelProperty@Schema
@ApiOperation(value = "foo", notes = "bar")@Operation(summary = "foo", description = "bar")
@ApiParam@Parameter
@ApiResponse(code = 404, message = "foo")@ApiResponse(responseCode = "404", description = "foo")

1
2
3
4
5
6
7
//Swagger3
@GetMapping("/page")
@Operation(summary = "部门分页查询")
public Result<PageResult> page(DeptPageQuery deptPageQuery) {
PageResult pageResult = deptService.pageQuery(deptPageQuery);
return Result.success(pageResult);
}

但是这样写实际展示效果不符合预期,查询参数展示成了一个 Object:

err.png

期望效果是:

suss.png

解决方案

一路搜寻到了 Swagger API 的 Github:https://github.com/swagger-api/swagger-core/issues/4177

很简单,请求方法参数上加 @ParameterObject 注解

1
2
3
4
5
6
@GetMapping("/page")
@Operation(summary = "部门分页查询")
public Result<PageResult> page(@ParameterObject DeptPageQuery deptPageQuery) {
PageResult pageResult = deptService.pageQuery(deptPageQuery);
return Result.success(pageResult);
}

但注意这个是 springdoc-openapi-common 包下的注解,不是 swagger-annotations 包内的

  • 标题: Swagger3 GET请求使用对象接收 Query 参数,注解怎么写?
  • 作者: SkyLeech
  • 创建于 : 2024-10-22 21:44:41
  • 更新于 : 2024-10-24 21:21:33
  • 链接: https://blog.skyleech.me/2024/10/22/Swagger3-GET请求使用对象接收-Query-参数,注解怎么写?/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
Swagger3 GET请求使用对象接收 Query 参数,注解怎么写?