Swagger 如何将DTO中的对象数组与nestjs中的多部分formdata一起使用?

Swagger 如何将DTO中的对象数组与nestjs中的多部分formdata一起使用?,swagger,nestjs,Swagger,Nestjs,如果我使用多部分formdata,并且对于DTO,使用包含对象数组的字段,则formdata不允许在swagger DTO中包含该字段。现在,我必须使用postman提供的原始JSON选项,但我需要nestjs内置swagger DTO的相同实现 请在下面找到我的控制器代码- @Post('/create') @UseGuards(AuthGuard('jwt')) @ApiBearerAuth() @ApiOkResponse({}) @H

如果我使用多部分formdata,并且对于DTO,使用包含对象数组的字段,则formdata不允许在swagger DTO中包含该字段。现在,我必须使用postman提供的原始JSON选项,但我需要nestjs内置swagger DTO的相同实现

请在下面找到我的控制器代码-

  @Post('/create')    
  @UseGuards(AuthGuard('jwt'))    
  @ApiBearerAuth()    
  @ApiOkResponse({})     
  @HttpCode(HttpStatus.OK)    
  @ApiOperation({ title: 'Create a project.' })   
  @ApiConsumes('multipart/form-data')   
  @UseInterceptors(FileInterceptor('file'))   
  @ApiImplicitFile({ name: 'image', required: true })   
  @ApiCreatedResponse({})    
    
  async create(@Req() request: Request, @UploadedFile() image: Express.Multer.File,) {    
    const jsonRequest = request.body;    
    if (request['user']) {   
      jsonRequest.createdBy = request['user']._id;    
      jsonRequest.updatedBy = request['user']._id;    
    }    
    const result = await this.projectsService.createProject(jsonRequest, image.buffer,  
   image.originalname, image.mimetype, image.size);    
    return result;   
  }    
请找到我的招摇过市DTO

import { ApiModelProperty } from '@nestjs/swagger';    
import { IsString, MinLength, MaxLength, IsBoolean, IsArray } from 'class-validator';    
    
export class CreateProjectDto {    
  // template Id    
  @ApiModelProperty({    
    example: '604b3b7d45701c85711a9f5d',      
    description: 'The template Id of the project.',    
    format: 'string',     
    required: false    
  })    
  readonly templateId: string;    
    
  // organization Id     
  @ApiModelProperty({    
    example: '604f73e11f43762778292b81',     
    description: 'The organization Id of the project.',     
    format: 'string',     
  })    
  readonly organizationId: string;    
    
  // name     
  @IsString()   
  @MinLength(3)    
  @MaxLength(255)    
  @ApiModelProperty({   
    example: 'blender box',   
    description: 'The name of the project.',    
    format: 'string',   
  })   
  readonly name: string;

  // image    
  @ApiModelProperty({    
    example: 'default.png',    
    description: 'The image of the project.',    
    format: 'string',     
    required: false     
  })     
  readonly image: string;     
     
  // description    
  @IsString()    
  @ApiModelProperty({    
    example: 'test data',    
    description: 'The description of the project.',   
    format: 'string',    
    required: false      
  })    
  readonly description: string;    
    
  // Allow Participants to see responses   
  @IsString()    
  @ApiModelProperty({   
    example: "before/after",   
    description: 'Allow Participants to see responses from other participants.',    
    format: 'string',    
    required: false    
  })    
  readonly respondToQues: String;    
     
  // Add Participants Additional Fields    
  @IsArray()    
  @ApiModelProperty({    
    example: [     
      {    
      "fieldName": "Fav Color",   
      "fieldType": "checkbox",   
      "optionName": [    
        "option1",   
        "option2",   
        "option3",   
        "option4"    
      ]    
    },    
    {    
      "fieldName": "Meal Preference",    
      "fieldType": "radio button",    
      "optionName": [    
        "option1",   
        "option2",    
        "option3",    
        "option4"    
      ]    
    },    
    {   
      "fieldName": "Org Name",    
      "fieldType": "dropdown",   
      "optionName": [   
        "option1",   
        "option2",   
        "option3",   
        "option4"   
      ]   
    },   
    {    
      "fieldName": "Bio",    
      "fieldType": "single-line text",    
      "optionName": ""    
    },    
    {     
      "fieldName": "Tagline",    
      "fieldType": "multi-line text",    
      "optionName": ""   
    }    
  ],    
    description: 'Additional meta fields that can be attached to each participant within the project.',    
    format: 'string',    
    required: false   
  })    
  readonly additionalFields: string    
    
  // createdBy   
  createdBy: string;   
   
  // updatedBy    
  updatedBy: string;    
}    

上面的DTO文件具有附加字段选项,导致上述多部分formdata中出现问题。

当属性为数组时,我们必须手动指示数组类型,如下所示:

@ApiProperty({ type: [String] })
names: string[];

包括类型作为数组的第一个元素(如上所示),或者将isArray属性设置为true

我对数组类型也这样做,但我的问题是multipart/formdata不接受如上所述的对象字段数组。