我有一个通用类如下:
import {IsArray, IsNotEmpty, IsString, ValidateNested} from "class-validator";
import {PatientInfoValidator} from "./businessInfo/PatientInfoValidator";
import {TypeValidator} from "./TypeValidator";
import {Type} from "class-transformer";
export class GenericValidator {
@IsString()
@IsNotEmpty()
userId: string;
@ValidateNested({each:true})
@Type(() => TypeValidator)
type: TypeValidator;
}
Run Code Online (Sandbox Code Playgroud)
以及继承该类的两个类
import {IsArray, IsNotEmpty, IsString, ValidateNested} from "class-validator";
import {PatientInfoValidator} from "./businessInfo/PatientInfoValidator";
import {Type} from "class-transformer";
import {BusinessInfoValidator} from "./BusinessInfoValidator";
import {GenericValidator} from "./GenericValidator";
import {TypeValidator} from "./TypeValidator";
export class BodyValidator extends GenericValidator {
@IsString()
@IsNotEmpty()
userId: string;
@ValidateNested({each:true})
@Type(() => TypeValidator)
type: TypeValidator;
@ValidateNested({each:true})
@Type(() => BusinessInfoValidator)
businessInformation: BusinessInfoValidator;
@IsArray()
sheetLink: string[];
validate: boolean;
}
Run Code Online (Sandbox Code Playgroud)
和:
import {GenericValidator} from "./GenericValidator";
import {IsNotEmpty, IsString, ValidateNested} from "class-validator";
import {Type} from "class-transformer";
import {TypeValidator} from "./TypeValidator";
export class CaseTwoValidator extends GenericValidator {
@IsString()
@IsNotEmpty()
userId: string;
@ValidateNested({each:true})
@Type(() => TypeValidator)
type: TypeValidator;
newKey: string;
}
Run Code Online (Sandbox Code Playgroud)
这些在 DTO 中用于验证:
import { ApiProperty } from '@nestjs/swagger';
import {ValidateNested} from "class-validator";
import { Type } from 'class-transformer';
import { BodyValidator} from "../validators/BodyValidator";
import { GenericValidator} from "../validators/GenericValidator";
import { CaseTwoValidator} from "../validators/CaseTwoValidator";
export class CreateSheetsDto {
@ApiProperty()
@ValidateNested({ each: true })
@Type(() => GenericValidator, {
keepDiscriminatorProperty: true,
discriminator: {
property: "type.label",
subTypes: [
{ value: BodyValidator, name: "Hors dissection et syndrome neurologique" },
{ value: CaseTwoValidator, name: "NewCase" }
]
}
})
readonly body: BodyValidator | CaseTwoValidator;
}
Run Code Online (Sandbox Code Playgroud)
我期望控制器将此 DTO 作为参数:拒绝所有不符合 BodyValidator 或 CaseTwoValidator 格式的请求正文为错误请求。
当前行为:API 请求非常宽松,并且不强制执行嵌套检查。
我想知道我在这个问题上花了 3 个小时是否遗漏了一些明显的东西。
| 归档时间: |
|
| 查看次数: |
4105 次 |
| 最近记录: |