You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nest.js中验证嵌套对象组成的请求列表参数

报错是因为class-validator校验嵌套结构时,需要配合class-transformer的@Type装饰器明确指定嵌套对象的构造类,TS的类型标注会在编译后丢失,运行时无法识别嵌套的RoomMate类型。

修正步骤

  • 从class-transformer包导入@Type装饰器
  • 在roomMates属性上添加@Type(() => RoomMate)注解,和现有@ValidateNested配合使用
  • 确保RoomMate类本身的属性也正确添加了class-validator的校验注解

修正后的完整代码

import { Type } from 'class-transformer';
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString, IsArray, ValidateNested } from 'class-validator';
import { RoomMate } from './room-mate.dto';

export class Room {
  @ApiProperty()
  @IsNotEmpty()
  @IsString()
  name: string;

  @ApiProperty({ type: [RoomMate] })
  @IsNotEmpty()
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => RoomMate)
  roomMates: RoomMate[];
}

全局管道配置要求

需要确保NestJS的ValidationPipe开启了transform配置,否则类型转换不会生效,配置示例如下:

// main.ts 全局管道配置
app.useGlobalPipes(new ValidationPipe({
  transform: true,
  whitelist: true
}));

内容的提问来源于stack exchange,提问作者koallalays

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 16:45:07