2 回答
TA贡献1808条经验 获得超4个赞
所以事实证明,默认响应类以及路由上的响应类仅适用于开放的 API 文档。默认情况下,文档将记录每个端点,就像它们返回 json 一样。
因此,使用下面的示例代码,每个响应都将被标记为内容类型 text/html。在第二次路由中,这被 application/json 覆盖
app = FastAPI(default_response_class=HTMLResponse)
@app.get("/")
async def getDoc():
foo = client.get_database('foo')
result = await foo.bar.find_one({'author': 'Mike'})
return MongoResponse(result)
@app.get("/other", response_class=JSONResponse)
async def json():
return {"json": "true"}
从这个意义上说,我可能应该显式使用我的类并将默认响应类保留为 JSON,以便将它们记录为 JSON 响应。
TA贡献1802条经验 获得超5个赞
我求助于猴子补丁
from fastapi import routing as fastapi_routing
from fastapi.responses import ORJSONResponse
def api_route(self, path, **kwargs):
def decorator(func):
if type(kwargs["response_class"]) == DefaultPlaceholder:
kwargs["response_class"] = Default(ORJSONResponse)
self.add_api_route(
path,
func,
**kwargs,
)
return func
return decorator
fastapi_routing.APIRouter.api_route = api_route
添加回答
举报