【问题标题】:How to change query parameters serialization using nestjs/swagger?如何使用 nestjs/swagger 更改查询参数序列化?
【发布时间】:2020-05-28 00:51:29
【问题描述】:

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

如何改变这种行为?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我在 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>;
      

      【讨论】:

        猜你喜欢
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 1970-01-01
        • 2020-05-22
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        相关资源
        最近更新 更多