nestjs使用swagger生成文档:装饰器使用总结
Author:zhoulujun Date:
swagg使用起来很简单
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter(),
);
const config = new DocumentBuilder()
.setTitle("DataTalk API")
.setDescription("Open API description")
.setVersion("1.0.0")
.addTag("cats")
.build();
app.setGlobalPrefix("api");
app.enableCors();
app.listen(process.env.PORT ?? 8084);
以下是 @nestjs/swagger 模块中常用装饰器的详细说明及用法示例,分为 控制器/方法装饰器 和 模型/属性装饰器 两类:
控制器/方法装饰器
装饰器 | 用途 |
---|---|
@ApiTags('标签名') | 给控制器分组(Swagger UI 按标签分类) |
@ApiOperation(options) | 描述 API 操作(标题、详情等) |
@ApiParam(options) | 定义路径参数 |
@ApiQuery(options) | 定义查询参数 |
@ApiBody(options) | 定义请求体结构(用于 POST/PUT 请求) |
@ApiResponse(options) | 定义响应状态码和数据结构 |
@ApiHeader(options) | 定义请求头参数 |
@ApiBearerAuth() | 标记需要 JWT 认证的接口 |
import { Controller, Post, Body, Get, Param } from '@nestjs/common';
import { ApiTags, ApiOperation, ApiResponse, ApiBody, ApiParam } from '@nestjs/swagger';
import { CreateUserDto, UserDto } from './dto/user.dto';
@ApiTags('用户')
@Controller('users')
export class UserController {
@Post()
@ApiOperation({ summary: '创建用户' })
@ApiBody({ type: CreateUserDto })
@ApiResponse({ status: 201, type: UserDto })
createUser(@Body() dto: CreateUserDto) {
// ...
}
@Get(':id')
@ApiParam({ name: 'id', type: Number })
@ApiResponse({ status: 200, type: UserDto })
getUser(@Param('id') id: number) {
// ...
}
}
模型/属性装饰器
装饰器 | 用途 |
---|---|
@ApiProperty(options) | 定义模型属性的元数据(类型、描述等) |
@ApiPropertyOptional() | 简写 @ApiProperty({ required: false }) |
@ApiHideProperty() | 隐藏属性(不显示在 Swagger 文档) |
@ApiExtraModels(Model) | 声明额外模型(用于联合类型或多态) |
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
export class CreateUserDto {
@ApiProperty({ description: '用户名', example: 'Alice' })
name: string;
@ApiProperty({ description: '邮箱', format: 'email' })
email: string;
@ApiPropertyOptional({ description: '年龄', minimum: 0 })
age?: number;
@ApiHideProperty()
password: string;
}
联合类型或多态模型
import { ApiExtraModels, ApiOkResponse, getSchemaPath } from '@nestjs/swagger';
@ApiExtraModels(Cat, Dog)
@Controller()
export class AppController {
@Get('animals')
@ApiOkResponse({
schema: {
oneOf: [
{ $ref: getSchemaPath(Cat) },
{ $ref: getSchemaPath(Dog) }
]
}
})
getAnimals() {
// ...
}
}
与 class-validator 结合:@ApiProperty 可配合 @IsString() 等装饰器使用,同时实现验证和文档生成。
转载本站文章《nestjs使用swagger生成文档:装饰器使用总结》,
请注明出处:https://www.zhoulujun.cn/html/webfront/server/nestjs/9535.html
下一篇:最后一页