swagger 中数组 POST 的空 JSON 参数

Posted

技术标签:

【中文标题】swagger 中数组 POST 的空 JSON 参数【英文标题】:empty JSON parameters for array POST in swagger 【发布时间】:2019-06-27 15:45:17 【问题描述】:

我正在使用nest.js,并且我有一个发布路径来将新新闻添加到数据库 所以我用邮递员发送这样的对象数组:

[
 
    "newsTitle" : "title1",
    "newsDescription": "description1"
,
 
    "newsTitle" : "title2",
    "newsDescription": "description2"

]

这是在我的控制器中发布的代码:

@Post()
  async create(@Body() body: NewsDto[]) 

    const len = body.length;

    if (len == 1) 
    

    else if (len > 1) 
    

    return this.newsService.createNews(body);
  

所以一切都可以正常发布并将数据保存在数据库中 但是当我使用 swagger 时,我得到了这个控制器的 dto 的模型,如下所示:

你可以看到这里没有显示 dto 的参数,我得到了“数组”标题,因为我使用了@Body() body: NewsDto[],你看到的就是数组

在帖子中我也无法获取 JSON,因此我可以添加它或用另一个词发布它

那么如何处理这个问题,当数组的长度只有 1 个对象时,我返回 NewsDto 参数,如果数组的长度超过 1 个对象,那么也返回 NewsDto 参数而不是 Array?

【问题讨论】:

【参考方案1】:

您必须将 @ApiModelProperty() 装饰器添加到 DTO 的属性中:

export class NewsDto 
  @ApiModelProperty()
  newsTitle: string;

  @ApiModelProperty()
  newsDescription: string;

然后在控制器方法中添加@ApiImplicitBody()

@Post()
@ApiImplicitBody( name: 'news', type: [NewsDto])
async create(@Body('news') body: NewsDto[]) 

【讨论】:

我已经添加了这个!对于我使用 dto 而不是像现在这样的数组的其他 post 函数,swagger 工作正常,dto 的参数显示得很好@Kim Kern 对于数组类型,您还必须将ApiImplicitBody 添加到控制器方法中,请参阅我的编辑。 在控制器中使用typescript、nestJs或swagger时,也可以使用这个; @Post() @ApiBody( type: [objectItem] ) async create(@Body() body: objectItem[])

以上是关于swagger 中数组 POST 的空 JSON 参数的主要内容,如果未能解决你的问题,请参考以下文章

GoLang/Javascript:JSON POST 上的空 postForm 和解码(正文)

React fetch post 请求中的空属性和值

如何在 R 中使用 tidyjson 处理嵌套的空 JSON 数组

绑定到 appsettings.json 中的空数组时的空属性

隐藏数组的空值

postman如何传递对象数组