nestjs,swagger DTO 扩展

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

我的回应类型之一

export class VoucherDto {
  @ApiProperty({ example: 'fff', required: true, description: '' })
  name!: string;

  @ApiProperty({ example: 'fff', required: false, description: '' })
  expirationPeriodStart!: Date;

  @ApiProperty({ example: 'fff', required: false, description: '' })
  expirationPeriodEnd!: Date;
}

我常见的 Dto 看起来像这样。

import { ApiProperty } from '@nestjs/swagger';

export class BaseResDto {
  @ApiProperty({ default: 1, example: 1 })
  page: number;

  @ApiProperty({ default: 1, example: 10 })
  totalPage: number;
}

export class ApiResponseWrapper<Some> extends BaseResDto {
  @ApiProperty({ type: [Object] })
  data: { Some };
}

但是显示是这样的。

{
  "page": 1,
  "totalPage": 10,
  "data": [
    {}
  ]
}

我怎样才能这样显示?

{
  "page": 1,
  "totalPage": 10,
  "data": [
    {
     "name": "test",
     "expirationPeriodStart": "2024-02-01T01:41:53.770Z",
     "expirationPeriodEnd": "2024-12-01T01:41:53.770Z",
    }
  ]
}

我是 Java、nestjs、typeorm 的新手。 我按照chatGPT的解决方案但无法解决。

nestjs swagger typeorm
1个回答
0
投票

找到解决方案。

export class ApiResponseWrapper<T> extends BaseResDto {
  @ApiProperty({
    oneOf: [
      { $ref: getSchemaPath(VoucherDto) },
      { $ref: getSchemaPath(SomeOtherDtos) },
      ...
    ],
  })
  data: T[];
}

并致电

ApiResponseWrapper

© www.soinside.com 2019 - 2024. All rights reserved.