пустые параметры JSON для массива POST в swagger - PullRequest
0 голосов
/ 03 февраля 2019

Я использую 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);
  }

так что все отлично работает в посте и сохранении данных в базе данных, но когда я использую сваггер, я получаю модель для dto этого контроллера, как это:

enter image description here

Вы можете видеть, что параметры dto здесь не отображаются, и вместо этого я получаю заголовок "Array", потому что я использую @Body() body: NewsDto[], и это массив, как вы видите

enter image description here

также здесь, в сообщении, я не могу получить JSON, поэтому я могу добавить его или опубликовать в другом слове

, так как это сделатьэто так, когда длина массива только 1 объект, тогда я возвращаю параметры NewsDto, а если длина массива больше 1 объекта, так что возвращаю также параметры NewsDto вместо Array?

1 Ответ

0 голосов
/ 03 февраля 2019

Вы должны добавить декоратор @ApiModelProperty() к свойствам своего DTO:

export class NewsDto {
  @ApiModelProperty()
  newsTitle: string;

  @ApiModelProperty()
  newsDescription: string;
}

Затем добавьте @ApiImplicitBody() к методу контроллера:

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