【问题标题】:How to define the response body object, in a NestJs-generated Swagger document?如何在 NestJs 生成的 Swagger 文档中定义响应正文对象?
【发布时间】:2022-01-29 01:05:28
【问题描述】:

我正在使用 NestJs 及其 Swagger 插件来自动生成我的 API 文档。

问题是,我不知道如何使 response 架构出现在文档中。在我的 GET 路由中,我得到的只是“代码 200”,没有数据结构。

我有一个典型的设置,其中控制器方法使用相应的服务方法,而服务方法又使用 TypeOrm 存储库。例如:

@Get()
 findAll() {    
   return this.usersService.findAll();
}

我尝试使用 @ApiResponse 装饰器,但并没有真正看到任何方法可以使其达到此目的。此外,创建一个 user.dto.ts 并将其作为控制器路由的返回类型并没有任何好处。

最终,这就是我在 Swagger 中得到的:

如何定义响应主体架构?

【问题讨论】:

    标签: typescript swagger nestjs


    【解决方案1】:

    您可以将typeisArray 属性与ApiResponse 系列装饰器结合使用。例如:

    @ApiOkResponse({
        description: 'The user records',
        type: User,
        isArray: true
    })
    @Get()
     findAll() {    
       return this.usersService.findAll();
    }
    

    此外,考虑使用Swagger CLI plugin 来帮助您在构建期间自动应用这些装饰器,而不必手动保持所有内容同步。

    【讨论】:

    • 一旦“type”属性引用了一个简单的 dto,而不是 Typeorm 的 User 实体,这就会起作用。您指的是哪一个,按类型:用户?总之,谢谢!
    • 它必须是一个 DTO,除非你使用 Swagger CLI 插件,它可以自动为你推断出很多这样的东西
    • 是的,所以我使用了该插件,但它似乎没有正确地从路由最终返回的用户实体中推断出数据。也许需要一些调整?
    猜你喜欢
    • 1970-01-01
    • 2022-08-07
    • 2018-08-05
    • 2016-09-14
    • 2023-02-10
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多