Nestjs 如何在nest js的ApiBody decorator中向类型添加对象

Nestjs 如何在nest js的ApiBody decorator中向类型添加对象,nestjs,nestjs-swagger,Nestjs,Nestjs Swagger,我有一个带有POST操作的控制器来保存代码。以下是我控制器中的内容: 导入{ 海关警卫, 理由代码服务, 推理代码, }来自“cnv ms core”; 导出类控制器{ 构造函数(私有只读reasonCodeService:reasonCodeService){} } @Post(“原因代码”) @ApiOperation({摘要:'保存原因代码'}) @蜂体({ //类型:ReasonCode, 描述:'原因代码', 要求:正确, 艾萨瑞:错, }) @蜂群反应({ 现状:201, 描述:“原

我有一个带有POST操作的控制器来保存代码。以下是我控制器中的内容:

导入{
海关警卫,
理由代码服务,
推理代码,
}来自“cnv ms core”;
导出类控制器{
构造函数(私有只读reasonCodeService:reasonCodeService){}
}
@Post(“原因代码”)
@ApiOperation({摘要:'保存原因代码'})
@蜂体({
//类型:ReasonCode,
描述:'原因代码',
要求:正确,
艾萨瑞:错,
})
@蜂群反应({
现状:201,
描述:“原因代码已成功保存。”
})  
异步存储代码(
@Body()newReasonCode:ReasonCode,
):承诺{
返回此.reasonCodeService.saveReasonCode(newReasonCode);
}
这是我的接口对象:

导出接口代码{
名称:字符串;
描述:字符串;
类型:ReasonCodeTypeEnum;
isVisible:布尔;
createdAt?:日期;
更新日期:日期;
}
正如您在我的控制器的上述代码片段中所看到的,我在“@ApiBody”装饰器中注释掉了“type”。我想添加这个,但是当我取消注释时,我看到错误“ReasonCode只引用一个类型,但在这里被用作一个值”,vs代码提供了将ReasonCode添加到导入的快速修复。但是,我已经在导入中使用了ReasonCode。我如何将其添加到@ApiBody中,才能在swagger ui中看到它


感谢您的帮助。

导出接口ReasonCode
更改为
导出类ReasonCode
可能会解决此问题而不是使用接口将类型添加到正文中。您应该使用类来完成此操作,然后只需将@ApiProperty()装饰器添加到类的每个属性中,这是一个更干净的解决方案,因为您可以避免使用@ApiBody()修饰符

此外,在使用类时,您可以利用类验证器装饰器在使用前验证主体

ApiProperty是从@nestjs/swagger导出的

更多信息请点击此处:


还要检查有关类验证器的信息:

为什么不创建一个DTO类而不是使用所有api属性的类型?我将其更改为一个类,现在我看到以下错误:未找到模块:错误:无法解析“缓存管理器”模块未找到:错误:无法解析“类转换器”模块未找到:错误:无法解析“class transformer/storage”模块未找到:错误:无法解析“class validator”模块未找到:错误:无法解析“express”模块未找到:错误:无法解析“fastify swagger”模块未找到:错误:无法解析“path”使用命令安装包:npm i class validator class transformerAlso,你用的是express还是fastify with nest?让我看看你的班级是否一切正常谢谢你,非常感谢你的帮助。我会浏览一下文件夹结构,看看是否能找到什么。