4

最近我将nestjs/swagger项目中的包更新为^4.0.0. 之前 Swagger 将我的查询参数序列化如下:

/resources?parameter=1,2,3

现在看起来像这样:

/resources?parameter=1&parameter=2&parameter=3

我的查询的 DTO 对象如下所示:

class QueryDTO {
  @ApiProperty({
    required: false,
    type: [Number],
  })
  @IsOptional()
  readonly parameter?: number[];
}

我怎样才能改变这种行为?

4

2 回答 2

7

我在nestjs/swagger 4.5.9

我通过定义 DTO 使它工作(注意format: 'form'

  @IsNotEmpty()
  @ApiProperty({
    type: [Number],
    format: 'form',
  })
  @IsArray()
  @Transform((value: string) => value.split(',').map(item => Number(item)))
  @IsNumber({}, {each: true})
  deviceId: Array<number>;
于 2020-06-15T19:29:36.933 回答
2

作为一种解决方法,您可以从 DTO 中删除 @ApiProperty 并在具有样式和分解选项的控制器方法上使用 @ApiQuery 装饰器(只需保持与 dto 属性相同的参数名称)

    @Get('resources')
    @ApiQuery({name: 'parameter', required: false, explode: false, type: Number, isArray: true})
    getResources(@Query('parameter') parameter?: number[]) {}

您仍然可以将 DTO 对象原样用于其他按常规方式工作的参数。

于 2020-05-18T17:16:59.947 回答