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

如何在NestJS中隐藏Swagger文档页的特定Schema/模型?

在NestJS Swagger中隐藏指定Schema的解决方案

下面是几种精准隐藏部分Schema的可行方案,无需修改文件名或类名:

1. 使用官方装饰器单独排除Schema

给需要隐藏的DTO类添加@ApiExcludeSchema()装饰器,Swagger会自动跳过该Schema的展示:

import { ApiExcludeSchema } from '@nestjs/swagger';

@ApiExcludeSchema()
export class HiddenDto {
  id: number;
  description: string;
}

这个方法最直接,适合只隐藏少量独立的Schema。

2. 避免引用关联的Schema(保留字段结构)

如果某个DTO被其他公开DTO引用,你想隐藏被引用的Schema但保留字段的结构描述,可以手动定义字段类型为object并指定属性,替代直接引用类:

import { ApiProperty } from '@nestjs/swagger';

export class PublicDto {
  @ApiProperty({
    type: 'object',
    properties: {
      id: { type: 'number', description: 'ID' },
      description: { type: 'string', description: '描述' }
    }
  })
  relatedData: HiddenDto;
}

这样PublicDto的字段会正常展示结构,但HiddenDto的Schema不会出现在Swagger的Schemas列表中。

3. 全局配置过滤指定Schema

在生成Swagger文档时,通过extraModels指定仅包含需要展示的Schema,或者用transformSchema自定义过滤逻辑:

import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { PublicDtoA, PublicDtoB } from './your-dto-path';

const config = new DocumentBuilder()
  .setTitle('你的API文档')
  .setVersion('1.0')
  .build();

const document = SwaggerModule.createDocument(app, config, {
  // 仅传入需要展示的Schema
  extraModels: [PublicDtoA, PublicDtoB],
  // 自定义过滤:移除标题包含指定关键词的Schema
  transformSchema: (schema) => {
    if (schema.title?.includes('Hidden')) {
      return null;
    }
    return schema;
  }
});

SwaggerModule.setup('api-docs', app, document);

transformSchema会遍历所有生成的Schema,返回null的Schema会被排除出文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:00:15