我有一个应用程序,其中我按照Open-API规范将API响应模式定义为纯JavaScript对象。目前,我将其传递给@nestjs/swagger中的ApiResponse
装饰器,如下所示:
class CatsController {
@Get()
@ApiResponse({
status: 200,
schema: catSchema // plain js object imported from another file
})
getAll() {}
}
这很好用。然而,输出的 Open-API 规范包含了每个使用 catSchema
的终端点的冗长模式。相反,我希望输出的 Swagger 文件将 catSchema 放在 components
部分下,并在路径部分有对应的 $ref
。
components:
schemas:
Cat:
properties:
name:
type: string
paths:
/cats/{id}:
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Cat'
目前看来,唯一的方法就是将模式定义为DTO类,并针对每个类属性使用ApiProperty
装饰器。在我的情况下,这意味着我必须重构所有纯对象模式以成为DTO类。
有没有一种方法可以将原始模式输入到库中并获得预期的结果呢?
// instead of this:
class CatDto {
@ApiProperty()
name: string;
}
// I want to do:
const catSchema = {
type: 'object',
properties: {
name: { type: 'string' }
}
}
@ApiProperty
是Swagger在NestJs中理解模式的标签,并不支持内联模式设计。你能详细解释一下你想如何传递模式吗? - Tanmoy Bhattacharjee@ApiResponse
。它运行良好,除了不支持$ref
模式。输出在响应部分下直接包含模式。这有意义吗? - Pubudu Dodangoda