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

NestJS DTO配置:searchTerm传值需最小长度3,默认空字符串

实现符合要求的searchTerm字段校验与转换

可以通过class-transformer的转换能力结合class-validator的校验规则,完全在DTO文件中实现需求。核心思路是先对传入的searchTerm值进行转换处理(不符合长度要求则转为空字符串),再针对性地执行长度校验。

最终DTO代码实现

import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsOptional, IsString, MinLength, ValidateIf } from 'class-validator';
import { Transform, Type } from 'class-transformer';

export class SearchDto { // 替换成你的DTO实际名称
  @ApiPropertyOptional({ default: '' })
  @IsOptional()
  @IsString()
  @Type(() => String)
  // 仅当searchTerm不为空字符串时,才校验最小长度
  @ValidateIf((obj) => obj.searchTerm !== '')
  @MinLength(3)
  @Transform(({ value }) => {
    // 转换逻辑:传入字符串长度不足3则转为空,否则保留原值;非字符串也转为空
    return typeof value === 'string' ? (value.length >= 3 ? value : '') : '';
  })
  searchTerm: string = '';
}

关键逻辑说明

  1. 默认值设置:给searchTerm直接赋值= '',确保客户端未传入该字段时,值为空字符串。
  2. 转换处理:@Transform装饰器在class-transformer的转换阶段优先处理传入值:
    • 如果是字符串且长度小于3,直接转为空字符串;
    • 非字符串类型(比如客户端误传数字)也转为空,配合@IsString保证类型合法性。
  3. 条件校验:@ValidateIf配合@MinLength,仅当转换后的searchTerm不为空字符串时,才触发最小长度校验,避免空字符串触发校验错误。

这样既满足了「未传值默认空」「传值长度≥3则保留」「传值长度不足则设为空」的所有需求,同时保证了类型和长度的合法性校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:52:22