如何使用 nestjs/swagger 更改查询参数序列化?
Posted
技术标签:
【中文标题】如何使用 nestjs/swagger 更改查询参数序列化?【英文标题】:How to change query parameters serialization using nestjs/swagger? 【发布时间】:2020-05-28 00:51:29 【问题描述】:最近我将项目中的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[];
如何改变这种行为?
【问题讨论】:
【参考方案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>;
【讨论】:
以上是关于如何使用 nestjs/swagger 更改查询参数序列化?的主要内容,如果未能解决你的问题,请参考以下文章