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

NestJS class-validator是否能将传入对象转换为指定DTO实例的疑问

NestJS class-validator是否能将传入对象转换为指定DTO实例的疑问

嘿,各位大佬,我最近在做NestJS项目的时候碰到了个困惑,想跟大家请教下:

我先定义了这样一个UpdateUserDto:

export class UpdateUserDto {
  @IsEmail()
  email: string;

  @IsString()
  login: string;
}

然后在控制器方法里,我用了ValidationPipe并开启了transform: true,还重写了Crud的updateOneBase方法:

@UsePipes(new ValidationPipe({ transform: true }))
@Override('updateOneBase')
async updateOneOverride(
  @ParsedRequest() req: CrudRequest,
  @Body() dto: UpdateUserDto,
) {
  console.log(dto);
  return this.service.updateOne(req, dto);
}

现在我发送的请求体是:

{ "login": "...", "email": "...", "password": "123" }

我原本期望console.log(dto)能输出一个新的UpdateUserDto类实例,而且会自动过滤掉DTO里没定义的password字段,但实际打印出来的却是和请求体完全一样的对象——既不是DTO的实例,还保留了多余的password字段。

想问问大家,这是哪里出问题了?是不是我对transform选项的理解有误,还是需要额外配置什么才能让NestJS把请求体转换成DTO的实例呀?

备注:内容来源于stack exchange,提问作者Данияр Булдаков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:28:12