如何使用nestjs / swagger更改查询参数序列化?

时间:2020-02-12 12:49:55

标签: node.js typescript swagger nestjs nestjs-swagger

最近我已将项目中的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[];
}

如何更改此行为?

2 个答案:

答案 0 :(得分:3)

我正在使用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>;

答案 1 :(得分:0)

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

@ApiQuery({name: 'parameter', required: false, explode: false, type: Number, isArray: true})

您仍然可以按原样使用DTO对象,以用于其他可以正常工作的参数。