请求正文未显示在Nest.js + Swagger中

snvhrwxg  于 2022-12-23  发布在  其他
关注(0)|答案(6)|浏览(174)

我的控制器代码是这样的。

@Controller('customer')
export class CustomerController{

    constructor(private readonly customerService: CustomerService){}

    @Post('lookup')
    async someMethod(@Body() body:any){

        console.log("BEGIN -- CustomerController.someMethod");

我希望在Swagger中看到一个可以输入一些文本作为请求正文的地方,但我看到的却是

8e2ybdfx

8e2ybdfx1#

添加@ApiProperty()

export class User{

 @ApiProperty()
  name:string
 
}
mm9b1k5b

mm9b1k5b2#

所以听起来这里有一些事情要做。Swagger UI是一个发送请求的辅助工具,但是要做到这一点,它需要知道请求主体的形状。any还不够好。如果你正在寻找一个允许你发送任何东西的工具,curl或postman是你最好的选择(至少是免费的)。
Nest有一个Swagger插件,它会读取你的Typescript代码,并相应地修饰你的类型和方法,但是你必须选择启用它,否则,你需要使用@nestjs/swagger包中的装饰器来告诉Swagger什么类型应该进出方法。
只要对应于@Body()的类型有swagger装饰器您启用了swagger插件并且有一个有效的类,swagger UI就应该按预期显示,但是使用上面的方法和类型any对您没有任何好处。

kkbh8khc

kkbh8khc3#

我的端点接受未知的键/值数据,我遇到了同样的问题(我尝试了 any,unknown,Record〈string,any〉,object,{}),最后@Body() data: Map<string, any>对我起作用了。

gijlo24d

gijlo24d4#

你可以这样试试看:

@ApiBody({description: "body:any someMethod"})
@Post('lookup')
async someMethod(@Body() body:any){
console.log("BEGIN -- CustomerController.someMethod");
}
72qzrwbm

72qzrwbm5#

我会建议使用dto的身体。
参见documentation
DTO的示例如下所示。

日期:

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

export class CreateCatDto {
  @ApiProperty()
  name: string;

  @ApiProperty()
  age: number;

  @ApiProperty()
  breed: string;
}

功能

@Post()
async create(@Body() createCatDto: CreateCatDto) {
  //Do Stuff.
}

@ApiProperty向swagger请求添加属性。
它应该显示如下内容:

@Post()
@ApiBody({ type: CreateCatDto })
async create(@Body() createCatDto: CreateCatDto) {
  //Do Stuff.
}

上面的代码将给予与下面类似的输出,其中也将记录您的模式:

希望这个有用。

cclgggtu

cclgggtu6#

Swagger无法解释您的代码。这 * 不是 * 您的代码的问题。如果您的目标是测试您的API供UI团队使用,而不是一个全面的swagger文档,那么我发现最简单的方法是使用Postman。尝试使用Postman攻击您的API

相关问题