可选布尔查询参数未显示在Swagger中

3ks5zfa0  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(122)

我使用的是Nest.js,并启用了Swagger和Swagger CLI。我在控制器中有一个端点,它有一个可选的布尔查询参数:includeAll,默认为false。端点看起来像:

@Get()
  findAll(
    @Query('includeArtifacts', ParseOptionalBool)
    includeArtifacts = false,
  ) {
    return this.toursService.findAll({ includeArtifacts });
  }

字符串
我使用了一个类似于文档中描述的可注入管道变换来解析可选布尔值,如下所示:

export const toBoolean = (value?: string): boolean => {
  value = value?.toLowerCase();

  return value === 'true' || value === '1';
};

@Injectable()
export class ParseOptionalBool implements PipeTransform {
  transform(value?: any, metadata?: ArgumentMetadata): any {
    return toBoolean(value);
  }
}


一切顺利;但是,正如下面所示,当我在Swagger中查看端点时,没有提到我的includeArtifacts端点。
x1c 0d1x的数据

pbwdgjma

pbwdgjma1#

你可以像下面这样创建一个简单的类:

export class ParseOptionalBool {
  @ApiPropertyOptional()
  @IsBooleanString()
  @IsOptional()
  includeArtifacts: boolean;
}

字符串
你的控制器会像这样:

@Get()
  findAll(
    @Query() dto: ParseOptionalBool;
  ) {
    return this.toursService.findAll(dto);
  }


但这将返回字符串类型的对象,而不是布尔类型,如果你想解析布尔类型,你应该像下面这样做:

@ApiPropertyOptional()
  @IsBoolean()
  @IsOptional()
  @Transform(({ obj }) => obj.includeArtifacts == 'true')
  includeArtifacts: boolean;

相关问题