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

NestJS嵌套数组DTO问题:请求体无法被Swagger识别求助

解决NestJS嵌套数组DTO请求体为空的问题

问题原因

NestJS依赖class-transformer和class-validator解析、验证请求体,嵌套数组DTO需要显式指定元素类型并启用嵌套验证,否则框架无法将JSON正确转换为类实例,导致请求体解析为空。

解决方案步骤

1. 为嵌套数组添加必要装饰器

修改CreatePageDto,引入IsArray、ValidateNested和Type装饰器,明确数组元素类型:

import { IsArray, ValidateNested, Type } from 'class-validator';
import { ApiHideProperty, ApiProperty } from '@nestjs/swagger';
import { CreatePageTranslateDto } from './create-page-translate.dto'; // 根据实际路径调整

export class CreatePageDto {
  @ApiHideProperty()
  createAt: Date;

  @ApiHideProperty()
  updateAt: Date;

  @ApiProperty({
    type: CreatePageTranslateDto,
    isArray: true,
  })
  @IsArray()
  @ValidateNested({ each: true }) // 对数组每个元素做嵌套验证
  @Type(() => CreatePageTranslateDto) // 指定数组元素的转换类型
  translations: CreatePageTranslateDto[];
}

2. 启用ValidationPipe

全局注册(推荐)

在main.ts中全局配置,确保请求体自动转换为类实例:

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe({
    transform: true, // 必须开启,class-transformer才能工作
    whitelist: true, // 过滤DTO中未定义的属性
  }));
  await app.listen(3000);
}
bootstrap();

控制器方法单独启用

如果不需要全局配置,可在对应控制器方法上单独启用:

import { Body, Controller, Post, UsePipes, ValidationPipe } from '@nestjs/common';
import { CreatePageDto } from './dto/create-page.dto';
import { PagesService } from './pages.service';

@Controller('pages')
export class PagesController {
  constructor(private readonly pagesService: PagesService) {}

  @Post()
  @UsePipes(new ValidationPipe({ transform: true }))
  create(@Body() createPageDto: CreatePageDto) {
    return this.pagesService.create(createPageDto);
  }
}

3. 验证枚举定义

确保AvailableLanguages枚举包含请求中使用的es值,示例:

export enum AvailableLanguages {
  ES = 'es',
  EN = 'en',
  // 其他语言选项...
}

验证请求

重启服务后,再次发送原curl请求,请求体即可被正确解析。

内容的提问来源于stack exchange,提问作者Álex Goia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:52