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 和解码(正文)
如何在 R 中使用 tidyjson 处理嵌套的空 JSON 数组