【问题标题】:NestJS Swagger - How to declare multiselect enum field?NestJS Swagger - 如何声明多选枚举字段?
【发布时间】:2019-09-10 01:48:16
【问题描述】:

我在我的应用程序中使用@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 格式。有没有办法做到这一点?我做错了什么?

【问题讨论】:

  • 关于多选的问题,我也遇到了同样的问题。由于找不到现有问题,我使用 nestjs/swagger 项目创建了问题 237。详情请查看github.com/nestjs/swagger/issues/237
  • 我还为您的 URL 问题创建了另一个问题,问题编号是 238,可以在 github.com/nestjs/swagger/issues/238 找到。
  • 您找到解决方案了吗?我正在尝试使用多选枚举字段
  • 我想这仍然没有解决? ://

标签: node.js swagger nestjs


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多