NestJS - Swagger - 显示所有枚举值

Tom*_*m93 4 enums swagger typescript nestjs

我希望在 swagger UI 的主体部分中查看有关我的 dto 属性的所有枚举值。

我将这个 @ApiQuery 装饰器放入我的代码中:

@ApiQuery({
  name: 'name',
  enum: ENUM_NAME,
  isArray: true,
})
@Post()
async name(...):Promise<...> {...}
Run Code Online (Sandbox Code Playgroud)

但这与 @Query 装饰器一起使用,让 swagger 的过滤器工作。(在 NestJS Swagger 文档中查找)。

所以我没有将 @Query 放入我的代码中,如您所见,因为我希望将枚举的值放在我的 dto 中。

这是结果

但它不喜欢这个解决方案。这是一个解决方法。

有更好的方法来达到这个结果吗?

Jbo*_*cly 12

在 swagger 的主体部分中不可能像查询部分那样执行操作,但您可以这样做:

// app.controller.ts

@Post()
public async name(@Body() dto: NameDto): Promise<void> {}

Run Code Online (Sandbox Code Playgroud)
// app.controller.ts

@Post()
public async name(@Body() dto: NameDto): Promise<void> {}

Run Code Online (Sandbox Code Playgroud)

结果=>昂首阔步

或者如果你不想使用 dto

// app.controller.ts

@Post()
@ApiBody({
    schema: {
       type: 'object',
         properties: {
            name: {
              type: 'array',
              items: {
                 enum: [Demo.DEMO_1, Demo.DEMO_2],
                 example: [Demo.DEMO_1, Demo.DEMO_2],
              },
            },
        },
    },
})
public async name(@Body() dto: any): Promise<void> {}

Run Code Online (Sandbox Code Playgroud)

  • ApiPropertyOptions 的示例属性解决了我的问题。实际上,我通过将值数组更改为 Object.value(Demo) 来改进它,因此,如果将来我向枚举添加一些新值,它将显示在我的 swagger UI 中。 (2认同)