我在API文档中使用@nestjs/swagger
。当swagger发出请求时,我希望我的queryParam是features[]
而不是features
。Nest会自动在路由处理程序和文档中搜索@Query
。
SwaggerModule在路由处理程序中搜索所有@Body()、@Query()和@Param()装饰器以生成API文档。它还通过利用反射创建相应的模型定义。来自:https://docs.nestjs.com/openapi/types-and-parameters
所以如果我的变量名是features
,文档会自动选择它,请求失败是因为features
不是单个元素的数组,如果我尝试使用@ApiQuery
单独添加参数到swagger文档,我可以选择命名参数features[]
,但是它是单独显示的,而且我无法删除自动添加的features
参数。
@Get('/:uuid/configs')
@ApiOperation({
summary: 'Get configs for user',
})
//manually add param with [] in the name
@ApiQuery({
name: 'features[]',
required: true,
type: [String],
})
async getUserConfigs(
//automatic pickup from here
@Query() queryParams: GetUserConfigQueryParamsDto,
) {
return {
success: true,
} as ResponseBuilder;
}
This is how swagger looks with above code
我还尝试将查询的名称作为@Query中的参数传递。
@Get('/:uuid/configs')
@ApiOperation({
summary: 'Get configs for user',
})
//manually add param with [] in the name
@ApiQuery({
name: 'features[]',
required: true,
type: [String],
})
async getUserConfigs(
//Added the desired name as a param
@Query('features[]') queryParams: GetUserConfigQueryParamsDto,
) {
return {
success: true,
} as ResponseBuilder;
}
这确实改变了swagger的名称,但是当我在这种情况下执行请求时,由于编码的原因,[
转换为%5B
和%5D
,所以请求失败。
我只需要features[]
,而不是两者都要。但是我不能删除@Query或在变量名中添加[]。如何只得到features[]
?
下面是GetUserConfigQueryParamsDto
jic:
export class GetUserConfigQueryParamsDto {
@ApiProperty()
@IsDefined()
@IsArray()
@ArrayNotEmpty()
features: string[];
}
1条答案
按热度按时间h43kikqp1#
在@ApiProperty()装饰器的GetUserConfigQueryParamsDto类中,上述功能添加如下名称@ApiProperty({名称:'功能[]'})