如何在NestJS的Swagger定义中阻止默认HTTP 200响应生成?
解决NestJS Swagger DELETE路由默认生成200响应的问题
问题核心:NestJS Swagger插件会根据方法的返回类型自动推断响应状态码,async方法默认返回Promise<any>,因此会自动生成200响应,即使你已经添加了@ApiNoContentResponse。
解决步骤
明确方法返回类型为
void
让Swagger插件明确知道该方法没有返回内容,避免自动推断200响应。添加
@HttpCode注解指定响应状态码
强制接口返回204状态码,同时让Swagger插件识别到正确的响应状态。
修改后的代码示例
import { HttpCode, HttpStatus } from '@nestjs/common'; import { ApiParam, ApiNoContentResponse } from '@nestjs/swagger'; @ApiParam({ name: 'id', required: true, type: 'string', example: 'abc123', }) @ApiNoContentResponse({ description: '指定ID下的所有条目已删除', }) @HttpCode(HttpStatus.NO_CONTENT) @Delete('/accounts/:id/items') async deleteItems(@Param('id') id: string): Promise<void> { // 执行删除逻辑,无需返回任何内容 }
额外说明
- 确保
@nestjs/swagger/plugin已正确在nest-cli.json中启用(你的配置已经满足),插件会根据返回类型和@HttpCode注解生成正确的Swagger文档。 - 如果需要添加其他错误响应(比如404),可以补充
@ApiResponse注解,例如:@ApiResponse({ status: 404, description: '指定ID的账户不存在' })
内容的提问来源于stack exchange,提问作者MaxRumford
相关产品推荐
相关产品推荐

