Swagger 如何将DTO中的对象数组与nestjs中的多部分formdata一起使用?
如果我使用多部分formdata,并且对于DTO,使用包含对象数组的字段,则formdata不允许在swagger DTO中包含该字段。现在,我必须使用postman提供的原始JSON选项,但我需要nestjs内置swagger DTO的相同实现 请在下面找到我的控制器代码-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
@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不接受如上所述的对象字段数组。