Nest.js swagger模块-对象位于dto中,在swagger中不可见

a11xaf1n  于 2022-11-06  发布在  其他
关注(0)|答案(4)|浏览(314)

我正在用swagger在nest js中实现一个小应用程序,我有一个列(postgresql)作为json对象(typeorm中的简单json类型),嵌套的对象在swagger中是不可见的。

@ApiModelProperty()
@IsOptional()
  readonly foo: {
  boo: string[];
  boo2: string;
  boo3: string;
  ..etc
 };

在swagger中,我只有foo可见,对象为空,是否可以使用swagger嵌套js模块使整个json对象可见?
提前感谢Karol

x4shl7ld

x4shl7ld1#

使用显式类型

export interface Foo {
  boo: string[];
  boo2: string;
  boo3: string;
  ..etc
}

@ApiModelPropertyOptional({ type: Foo })
@IsOptional()
readonly foo: Foo;
stszievb

stszievb2#

请改用类
示例:

import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsArray, IsNotEmpty, IsString } from 'class-validator';
import { Type } from 'class-transformer';

export class StickerRequest {

    @IsNotEmpty()
    @IsString()
    @ApiProperty({ example: 'sticker 01' })
    readonly name: string;

    @ApiPropertyOptional({ example: 'This is sticker description' })
    readonly description?: string;

    @ApiPropertyOptional({ example: 'ami-01, ami-02' })
    readonly tags?: string;

}

export class CollectionRequest {

  @ApiProperty({ example: 'Ami' })
  @IsNotEmpty()
  @IsString()
  readonly collectionName: string;

  @ApiPropertyOptional({ example: 'This is collection description' })
  readonly description?: string;

  @ApiProperty({ example: 'fffa73e4efca9245489e2bac' })
  @IsNotEmpty()
  @IsString()
  readonly author: string;

  @ApiProperty({ type: StickerRequest }) <------- Here
  @IsNotEmpty()
  @IsArray()
  @Type(() => StickerRequest)
  stickers: StickerRequest[];

}
a14dhokn

a14dhokn3#

不要创建/使用接口的创建子数据(如果需要,可以使用导出或不使用导出),例如:

export class SubDto {
    @ApiModelProperty({ type: String })
    @IsString()
    readonly subStringOne: string;

    @ApiModelProperty({ type: String })
    @IsString()
    readonly subStrinTwo: string;
}

export class MainDto {

    @ApiModelProperty({ type: String })
    @IsString()
    readonly mainStringOne: string;

    @ApiModelProperty({ type: [SubDto] })
    @IsArray()
    readonly mainArray: SubDto[];

    // or do the same thing for objects
    @ApiModelProperty({ type: SubDto })
    @IsJSON() // @IsOject doesn't exist in Nestjs so I use @IsJSON().
    readonly mainObject: SubDto;
}
laik7k3q

laik7k3q4#

我相信你使用的是旧版本的nestjs,因为@ApiModelProperty现在被称为@ApiProperty .我建议你升级nestjs和swagger到它们的最新版本,并按照以下步骤操作,对我来说效果很好:
https://docs.nestjs.com/recipes/swagger#openapi-swagger
希望能有所帮助。

相关问题