【问题标题】:empty JSON parameters for array POST in swaggerswagger 中数组 POST 的空 JSON 参数
【发布时间】: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?

【问题讨论】:

    标签: javascript node.js typescript swagger nestjs


    【解决方案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[]) {
    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多