Как изменить сериализацию параметров запроса с помощью 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 ответа

Я использую 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>;

В качестве обходного пути вы можете удалить @ApiProperty из DTO и использовать декоратор @ApiQuery в методе контроллера, который имеет параметры стиля и разнесения (просто сохраните то же имя параметра, что и свойство dto)

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

Вы по-прежнему можете использовать объект DTO, поскольку он предназначен для дополнительных параметров, которые работают обычным образом.

Другие вопросы по тегам