如果我使用 multipart-formdata 并且 DTO 使用包含对象数组的字段,则不允许 formdata 在 swagger DTO 中包含该字段。现在我必须使用邮递员的原始 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;
}
Run Code Online (Sandbox Code Playgroud)
请找到我招摇的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;
}
Run Code Online (Sandbox Code Playgroud)
上述 DTO 文件具有附加字段选项,该选项导致上述多部分表单数据中出现问题。
当属性是数组时,我们必须手动指定数组类型,如下所示:
@ApiProperty({ type: [String] })
names: string[];
Run Code Online (Sandbox Code Playgroud)
要么将该类型包含为数组的第一个元素(如上所示),要么将isArray属性设置为true。
| 归档时间: |
|
| 查看次数: |
9689 次 |
| 最近记录: |