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

如何在NestJS Swagger OpenAPI CLI插件中排除特定属性?

解决方案

方法1:使用官方@ApiHideProperty()装饰器

这是最直接的官方方案——给需要排除的属性添加@ApiHideProperty()装饰器,NestJS Swagger CLI插件会自动识别并跳过该属性的@ApiProperty()生成,同时该属性会从Swagger文档中隐藏。

示例代码:

import { Entity, Column } from 'typeorm';
import { ApiHideProperty } from '@nestjs/swagger';

@Entity()
export class User {
  @Column()
  id: number; // 自动生成@ApiProperty()

  @Column()
  username: string; // 自动生成@ApiProperty()

  @Column()
  @ApiHideProperty() // 跳过此属性的自动生成
  password: string;
}

方法2:自定义插件转换逻辑(批量排除场景)

如果需要批量排除符合特定规则的属性(比如所有以_开头的属性),可以自定义Swagger CLI插件的转换逻辑:

  1. 创建自定义Transformer文件(如swagger-transformer.ts):
import { Type } from '@nestjs/common';
import { SwaggerGeneratorOptions } from '@nestjs/swagger/dist/swagger-generator.interface';
import { SwaggerTransformer } from '@nestjs/swagger/dist/swagger-transformer';

export class CustomSwaggerTransformer extends SwaggerTransformer {
  transformProperty(
    propertyKey: string,
    metadata: any,
    type: Type<any>,
    options: SwaggerGeneratorOptions,
  ) {
    // 这里定义排除规则:跳过所有以"_"开头的属性
    if (propertyKey.startsWith('_')) {
      return null;
    }
    return super.transformProperty(propertyKey, metadata, type, options);
  }
}
  1. 在nest-cli.json中配置使用该Transformer:
{
  "compilerOptions": {
    "plugins": [
      {
        "name": "@nestjs/swagger",
        "options": {
          "classValidatorShim": true,
          "introspectComments": true,
          "transformer": "./swagger-transformer.ts"
        }
      }
    ]
  }
}

注意事项

  • @ApiHideProperty()会同时阻止装饰器生成和文档展示,若仅需跳过自动生成但保留文档显示,可手动给该属性添加@ApiProperty()覆盖,但这样会失去自动生成的便捷性。
  • 自定义Transformer需确保与当前@nestjs/swagger版本兼容,避免版本差异导致的API不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:25:25