问题描述
我有 2 条路由,一条是 POST,它使用 @ApiBody
装饰器并正常工作,另一条是 GET,我不知道应该使用哪些装饰器来生成正确的 api。
class ImagesRequestDto {
@ApiProperty({ type: String })
@IsOptional()
srch?: string
@ApiProperty({ type: Number })
@IsOptional()
@Min(0)
offset?: number
@ApiProperty({ type: Number })
@IsOptional()
@Min(0)
@Max(1000)
limit?: number
}
// This one works:
@ApiBody({ type: ImagesRequestDto })
@ApiResponse({ status: 200,type: ImagesResponseDto })
@Post('list-post')
async listPost(@Req() request: Request,@Body() filter: ImagesRequestDto): Promise<ImagesResponseDto> {
const [images,count] = await this.imagesService.getUserImages(filter)
request.res.status(200)
return { images,count }
}
// This one generates incorrect openapi:
@ApiQuery(ImagesRequestDto)
// Or @ApiQuery({ type: ImagesRequestDto,name: 'filter' })
@ApiResponse({ type: ImagesResponseDto })
@Get('list-get')
async listGet(@Query() filter: ImagesRequestDto): Promise<ImagesResponseDto> {
const [images,count] = await this.imagesService.getUserImages(filter)
return { images,count }
}
我使用 @nestjs/swagger
生成 openapi.json,然后运行 nswag
为前端生成 api.ts
文件。结果是:
listPost(body: ImagesRequestDto,cancelToken?: CancelToken | undefined): Promise<ImagesResponseDto> {
...axios request post...
}
listGet(srch: string,offset: number,limit: number,imagesRequestDto: any,cancelToken?: CancelToken | undefined): Promise<ImagesResponseDto> {
...axios request get...
}
所以它有 imagesRequestDto: any
(为什么?)和一些来自 imagesRequestDto 的解构参数。
我希望 listGet
接受与 listPost
相同的参数 - 应该有 2 个参数,第一个是 query: ImagesRequestDto
,第二个是 cancelToken
。这更方便(特别是有很多过滤参数),因为这种情况下它可以被
const images = await imagesClient.listGet(ImagesRequestDto.fromJS({..specify only required arguments..}))
代替
const images = await imagesClient.listGet(srch,first,second,third,...,offset,limit)
openapi中的get请求是否可以实现或者有什么限制?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)