Как изменить сериализацию параметров запроса с помощью nestjs/swagger?
Недавно я обновил nestjs/swagger
пакет в моем проекте ^4.0.0
. Ранее Swagger сериализовал мои параметры запроса следующим образом:
/resources?parameter=1,2,3
Теперь это выглядит так:
/resources?parameter=1¶meter=2¶meter=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, поскольку он предназначен для дополнительных параметров, которые работают обычным образом.