如何在FastAPI的Swagger UI自动文档中禁用application/json
解决Swagger UI中保留默认application/json选项的问题
- 问题根源:FastAPI会自动为接口推断默认响应类型(比如JSON),仅在
responses里配置200状态码的内容类型,不足以覆盖这个默认行为。 - 解决方案:在路由装饰器中添加
response_class参数,明确指定响应类型为文件流相关类型,这样Swagger UI就只会展示你指定的内容类型。
修改后的代码示例(适合直接返回文件场景):
from fastapi import FileResponse @router.get( "/partners/{partner_id}/rsr-requests/{rsr_request_id}/{document_path}", responses={200: {"content": {"application/octet-stream": {}}, "description": "Файл"}}, response_class=FileResponse ) async def download_rsr_document(...): # 示例:返回目标文件的逻辑 return FileResponse( path="目标文件路径", media_type="application/octet-stream", filename="下载时显示的文件名" )
如果是手动读取文件内容构造响应,可使用如下写法:
from fastapi import Response @router.get( "/partners/{partner_id}/rsr-requests/{rsr_request_id}/{document_path}", responses={200: {"content": {"application/octet-stream": {}}, "description": "Файл"}}, response_class=Response ) async def download_rsr_document(...): with open("目标文件路径", "rb") as f: file_content = f.read() return Response(content=file_content, media_type="application/octet-stream")
添加response_class参数后,FastAPI会明确告知OpenAPI(Swagger UI基于它生成文档)该接口的唯一响应类型是二进制文件流,从而移除默认的application/json选项。
内容的提问来源于stack exchange,提问作者Альберт Александров
相关产品推荐
相关产品推荐

