如何在swagger示例中使用DTO

问题描述 投票:0回答:1

我正在 Nest js 中构建更新 API,我想记录我的 API。在此更新 API 中,我有不同类型的用户,并且根据这些用户,我有不同的属性(某些属性在所有类型的用户中都是通用的)。

我想使用这些 DTO 作为不同用户的示例。我怎样才能做到这一点?

我已经尝试过这段代码:

export const updateDirectoryExample = Object.freeze({
  sample_1: {
    summary: 'Contractor',
    value: { ...new UpdateDirectoryContractorDto() },
  },
});

控制器代码:

@ApiOkResponse({
    type: UpdateDirectoryResDto,
  })
  @ApiBody({
    type: UpdateDirectoryDto,
    examples: updateDirectoryExample,
  })
  updateDirectory(
    @AuthUser() reqUserDetails: IRequestUserDetails,
    @Body() body: UpdateDirectoryDto,
    @Req() request: Request,
  ) {
    return this.directoryService.updateDirectory(reqUserDetails, body, request);
  }

此代码在 UI 中显示一个空对象,而不是 DTO 中定义的那些属性。

javascript nestjs swagger swagger-ui
1个回答
0
投票

如果您的

UpdateDirectoryContractorDto
是一个普通的 NestJS DTO,带有一堆修饰字段但没有构造函数,那么调用
new UpdateDirectoryContractorDto()
将返回一个空白 DTO 实例,其中所有字段均未定义。

这意味着当 Swagger 渲染为 JSON 时,

{ ...new UpdateDirectoryContractorDto() }
的值只是一个空对象。相反,您应该传递您期望看到的确切对象作为
examples
的值。

export const updateDirectoryExample = Object.freeze({
  sample_1: {
    summary: 'Contractor',
    value: { 
      field1: "value1",
      field2: "value2",
    },
  },
});
© www.soinside.com 2019 - 2024. All rights reserved.