node.js - NestJS Swagger - 如何声明多选枚举字段?
问题描述
我在我的应用程序中使用 @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
格式。有没有办法做到这一点?我做错了什么?
解决方案
我做了这样的事情:
@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¶ms=2
又?params=1,2
推荐阅读
- java - 如何在不影响 CSV 文件中的逗号的情况下替换字符串中的逗号?
- reactjs - 如何使用自定义挂钩在组件之间共享状态数据?
- python - Matplotlib:将不同的散点标记分组在同一个图例下
- mysql - 每天根据日期名称备份mysql数据库
- jquery - 使用 Jquery 3.3.1 完整版而不是 bootstrap 4.3 附带的 slim 版本会返回错误
- redhat - 如何构建 scl,示例是旧的并且 rpmlint 与文档相矛盾?
- node.js - 为什么 find 方法在 Mongoose 中不起作用
- windows - 如何在alienware windows 10系统中安装nvidia docker?
- html - 弹性内的引导最小固定宽度
- flutter - currentuser 如何在flutter中通过fcm向另一个用户发送请求通知?