带有一个参数的字符串的Nestjs swagger数组

wqlqzqxt  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(165)

当我只发送一个参数,我得到的查询结果像字符串,而不是像字符串[]。这只从UI swagger happend,如果我从 Postman 发送-它的工作很好。
我只想从swagger-ui发送一个参数,得到的是字符串数组,而不是字符串
我该怎么修?请帮帮我。
示例1:send one paramenter and in my controller I got string like '25'
示例2:when I send 2 parameters in controller I can see array of strings ('25', '21')

export class List {
  @ApiProperty({ isArray: true, type: String, required: false })
  @IsOptional()
  public categories?: string[];
}
yeotifhr

yeotifhr1#

您应该尝试在服务编辑中的常量中扩展参数:
我不知道如何用正式的语言来解释,但是一个项目的字符串数组,对于JAVASCRIPT来说,似乎与一个字符串值是一样的。
因为数组不是类型,而是类型的形式......
所以,如果你在你的控制器中,在对它做任何事情之前,你重新声明为:

@Get(":id")
    findManybyId(@Param("id") id: string[]) {
        const idArray = [...id];
        return await this.service.findManyById(idArray);
    }

它将解决作为阵列的问题
老回答:
你应该尝试在你的控制器中改变你制作输入装饰器的地方。
在你的情况下,我不知道你是否使用ID来获取,但你必须做的例子:

@ApiOperation({
       summary: "Get many categories by ID",
   })
   async getMany(
       @Param("id") ids: string[],
   ) {
       return await this.categoriesService.getMany(id);
   }
inkz8wg9

inkz8wg92#

当你填写一个类别时,查询参数将被转换为字符串,而当你填写多个类别时,查询参数将被理解为数组。

为了解决此问题,我在DTO中添加了:

@Transform(({ value }) => (Array.isArray(value) ? value : Array(value)))
我强行施展阵

相关问题