首页 > 解决方案 > NestJS Swagger - 如何声明多选枚举字段?

问题描述

我在我的应用程序中使用 @nestjs/swagger 模块。我想为我的查询参数之一声明多选枚举字段。我在文档中读到我可以通过组合enumisArray属性来实现这一点。所以我做了类似的事情:

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格式。有没有办法做到这一点?我做错了什么?

标签: node.jsswaggernestjs

解决方案


我做了这样的事情:

@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


推荐阅读