当我只发送一个参数时,我得到的查询结果像字符串一样,而不是像字符串[]。这只发生在UI swagger,如果我从Postman发送-它工作得很好。
我只想从swagger-ui发送一个参数得到字符串数组,而不是字符串
我该如何修复它?请帮帮我。
Example1:发送一个参数,在我的控制器中,我得到字符串,如'25'
示例2:当我在控制器中发送2个参数时,我可以看到字符串数组('25','21')
export class List {
@ApiProperty({ isArray: true, type: String, required: false })
@IsOptional()
public categories?: string[];
}
当您填写单个类别时,查询参数将被翻译为字符串,而当您填写多个类别时,将其理解为数组。
为了解决这个问题,我添加了DTO:
@Transform(({ value }) => (Array.isArray(value) ? value : Array(value)))
强制转换为数组
你应该尝试在services中的const中展开你的参数编辑:
我不知道如何用正式的话来解释,但是一个项目的字符串数组,对于JAVASCRIPT来说,似乎和一个字符串值是一样的。
因为array不是类型,而是类型的一种形式....
所以,如果你在控制器中,在对它做任何操作之前,你重新声明为:
@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);
}