Class-验证器忽略嵌套对象
Class-validator is ignoring nested objects
我正在为我的项目使用 NestJs 框架。在我的控制器中,我接受 POST 请求并通过 ValidationPipe 将主体转换为我的 CreateHouseDTO。 ValidationPipe 正在使用白名单和转换。
当我像这样尝试 api 和 JSON 时:
{
"name": "Test",
"floors": [
{
"name": "floor1",
"rooms": [
{
"name": "room1"
},
{
"name": "room2"
}
]
}
]
}
这是我的应用记录的内容(console.log 输出):
CreateHouseDTO{
name:'Test',
floors[ {} ]
}
当我在其中犯了一些错误时,它甚至会验证嵌套对象。例如,如果我将 name 属性 in Floor 对象设置为 Null 或某些 数字 不带引号。
这是一个错误还是我做错了什么?请帮助我。
我的代码:
//My DTOs
import {ValidateNested, IsString, IsArray} from "class-validator";
import {Body, Controller, Post} from "@nestjs/common";
export class CreateHouseDTO {
@IsNotEmpty()
@IsString()
public name?: string;
@ValidateNested({each: true})
@IsArray()
@IsNotEmpty()
public floors?: CreateFloorDTO[];
}
export class CreateFloorDTO {
@IsString()
@IsNotEmpty()
public name?: string;
@ValidateNested({each: true})
@IsNotEmpty()
@IsArray()
public rooms?: CreateRoomDTO[];
}
export class CreateRoomDTO {
@IsString()
@IsNotEmpty()
public name?: string;
}
//My Controller
@Controller("house")
export class HouseController {
@Post()
async create(
@Body()
body: CreateHouseDTO
) {
console.log(body); //output I mentioned
return body;
}
}
你应该这样做:
export class CreateHouseDTO {
@IsNotEmpty()
@IsString()
public name?: string;
@ValidateNested({each: true})
@IsArray()
@IsNotEmpty()
@Type(()=>CreateFloorDTO)
public floors?: CreateFloorDTO[];
}
我正在为我的项目使用 NestJs 框架。在我的控制器中,我接受 POST 请求并通过 ValidationPipe 将主体转换为我的 CreateHouseDTO。 ValidationPipe 正在使用白名单和转换。
当我像这样尝试 api 和 JSON 时:
{
"name": "Test",
"floors": [
{
"name": "floor1",
"rooms": [
{
"name": "room1"
},
{
"name": "room2"
}
]
}
]
}
这是我的应用记录的内容(console.log 输出):
CreateHouseDTO{
name:'Test',
floors[ {} ]
}
当我在其中犯了一些错误时,它甚至会验证嵌套对象。例如,如果我将 name 属性 in Floor 对象设置为 Null 或某些 数字 不带引号。
这是一个错误还是我做错了什么?请帮助我。
我的代码:
//My DTOs
import {ValidateNested, IsString, IsArray} from "class-validator";
import {Body, Controller, Post} from "@nestjs/common";
export class CreateHouseDTO {
@IsNotEmpty()
@IsString()
public name?: string;
@ValidateNested({each: true})
@IsArray()
@IsNotEmpty()
public floors?: CreateFloorDTO[];
}
export class CreateFloorDTO {
@IsString()
@IsNotEmpty()
public name?: string;
@ValidateNested({each: true})
@IsNotEmpty()
@IsArray()
public rooms?: CreateRoomDTO[];
}
export class CreateRoomDTO {
@IsString()
@IsNotEmpty()
public name?: string;
}
//My Controller
@Controller("house")
export class HouseController {
@Post()
async create(
@Body()
body: CreateHouseDTO
) {
console.log(body); //output I mentioned
return body;
}
}
你应该这样做:
export class CreateHouseDTO {
@IsNotEmpty()
@IsString()
public name?: string;
@ValidateNested({each: true})
@IsArray()
@IsNotEmpty()
@Type(()=>CreateFloorDTO)
public floors?: CreateFloorDTO[];
}