3 回答
TA贡献2041条经验 获得超4个赞
我得到了问题的解决方案。
我应该将我的包装类更改为:
export class SequenceQueries{
@ValidateNested({ each: true })
@Type(() => SequenceQuery) // added @Type
queries:SequenceQuery[];
}
但我将保留这个问题,以防万一有人有替代解决方案,例如不必创建包装类。
TA贡献1966条经验 获得超4个赞
Nestjs 中有我完整的解决方案/实现
首先创建我的 DTO 类
export class WebhookDto {
@IsString()
@IsEnum(WebHookType)
type: string;
@IsString()
@IsUrl()
url: string;
@IsBoolean()
active: boolean;
}
export class WebhookDtoArray {
@IsArray()
@ValidateNested({ each: true })
@Type(() => WebhookDto)
webhooks: WebhookDto[];
}
将我的 DTO 类放入我的控制器定义中
@MessagePattern('set_webhooks')
async setWebhooks(
@Payload('body') webhookDtoArray: WebhookDtoArray,
@Payload() data,
): Promise<Store> {
return this.storeManagementService.setWebhooks(
data.userPayload.id,
webhookDtoArray,
);
}
邮递员中我应该发送的正文的示例
{
"webhooks": [{
"type": "InvoiceCreated",
"url": "https://test.free.beeceptor.com",
"active": true
},
{
"type": "InvoiceSettled",
"url": "https://test.free.beeceptor.com",
"active": true
},
{
"type": "InvoiceExpired",
"url": "https://test.free.beeceptor.com",
"active": true
}
]
}
TA贡献1775条经验 获得超8个赞
class-validator 确实支持数组验证,您只需添加您在 @ValidateNested( { every: true } ) 中所做的操作,您只需将 every 添加到集合元素中:
export class SequenceQuery {
@MinLength(10, {
each: true,
message: 'collection name is too short',
})
collection: string;
identifier: string;
count: number;
}
添加回答
举报