swagger 无法将“[]”添加到@Query名称,已尝试多种方法

6uxekuva  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(106)

我在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[];
}
h43kikqp

h43kikqp1#

在@ApiProperty()装饰器的GetUserConfigQueryParamsDto类中,上述功能添加如下名称@ApiProperty({名称:'功能[]'})

相关问题