NestJS Swagger - 如何声明多选枚举字段?
Posted
技术标签:
【中文标题】NestJS Swagger - 如何声明多选枚举字段?【英文标题】:NestJS Swagger - How to declare multiselect enum field? 【发布时间】:2019-09-10 01:48:16 【问题描述】:我在我的应用程序中使用@nestjs/swagger 模块。我想为我的查询参数之一声明多选枚举字段。我在文档中读到,我可以通过结合 enum
和 isArray
属性来实现这一点。所以我做了类似的事情:
class QueryParams
@ApiModelProperty(
enum: ['test_status_1', 'test_status_2'],
isArray: true
)
status: string[]
我正在使用这个类来验证查询。不幸的是,它不起作用。所以我决定在我的控制器中使用@ApiImplicitQuery
,如下所示:
@ApiImplicitQuery(
name: 'status',
enum: ['test_status_1', 'test_status_2'],
isArray: true,
collectionFormat: 'csv'
)
这允许我声明多选枚举,但是将这些参数添加到 url 的方式存在问题。如果我选择多个值,我会得到:
?status=test_status_1&status=test_status2
我希望使用上面指定的csv
格式发送它们。现在它使用multi
格式。有没有办法做到这一点?我做错了什么?
【问题讨论】:
关于多选的问题,我也遇到了同样的问题。由于找不到现有问题,我使用 nestjs/swagger 项目创建了问题 237。详情请查看github.com/nestjs/swagger/issues/237。 我还为您的 URL 问题创建了另一个问题,问题编号是 238,可以在 github.com/nestjs/swagger/issues/238 找到。 您找到解决方案了吗?我正在尝试使用多选枚举字段 我想这仍然没有解决? :// 【参考方案1】:我做了这样的事情:
@ApiProperty(
isArray: true,
required: false,
enum: TestCaseFiltersStatuses,
)
@IsOptional()
@IsEnum(TestCaseFiltersStatuses, each: true)
@IsArray()
@Transform((value) =>
if (typeof value == 'string')
return value.split(',')
return value;
)
statuses?: TestCaseFiltersStatuses[];
.
.
.
async testCaseList(@Query(new ValidationPipe(transform: true)) query: TestCaseFiltersModel)
...
这样就支持?params=1&params=2
和?params=1,2
【讨论】:
以上是关于NestJS Swagger - 如何声明多选枚举字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 nestjs/swagger 更改查询参数序列化?