我有一个可以返回以下两个不同DTO之一的路由:
@Get()
@ApiQuery({ name: 'legacy', description: "'Y' to get houses legacy" })
async findAllHouses(
@Query('legacy') legacy: string,
): Promise<HousesDto[] | HousesLegacyDto[]> {
...
}
我想把这两个ResponseDTO
都展示出来。我试过这个装饰器:
@ApiOkResponse({
schema: { oneOf: refs(HousesDto, HousesLegacyDto) },
})
// OR
@ApiOkResponse({
schema: {
oneOf: [
{ $ref: getSchemaPath(HousesDto) },
{ $ref: getSchemaPath(HousesLegacyDto) },
],
},
})
其中@ApiExtraModels()
位于DTO类的顶部,@ApiProperty()
位于每个属性上。
但我仍然在Swagger中得到空对象,我想它甚至不会考虑数组类型。
如何正确显示这两个架构?
2条答案
按热度按时间hsgswve41#
在我看来,像很多非常模糊的解决方案已经张贴在这里和那里,所以我会尽量澄清什么需要做。
您有两个DTO:
然后,您的控制器:
请注意下面的解决方案。您需要将DTO引用为@ApiExtraModels(),然后可以将它们添加为anyOf:指涉(...)。
希望这对某些人有帮助:)
gwo2fgha2#
所以我遇到了一个类似的问题,这就是如何获得上图所示的输出。
使用
@ApiResponse
装饰器,您可以使用examples属性设置两个响应,请尝试下面的代码示例