如何覆盖 FastAPI 预定义的 UUID 验证错误?



我想在UUID验证失败时使用我自己的自定义response_body。如何在保持处理程序上的UUID类型的同时做到这一点?

app.get("/streams/{stream_id}")
async def get_stream(stream_id: UUID):
...

我可以用str替换UUID,然后使用UUID对象在id无效时尝试ValueError异常。但我想弄清楚是否有一个FastAPI的方法。文档只允许对路径参数进行数值验证。

我如何使用我自己的UUID参数验证响应?

不幸的是,对于内联参数作为pydantic类定义来说,重写错误消息并不直接。

但是,您可以像这样简单:

@app.get("/streams/{stream_id}")
async def get_stream(stream_id: str):
try:
stream_id_validated =  UUID(stream_id)
except ValueError as e:
return JSONResponse(
status_code=400,
content={"message": f"Oops! your streem id is not a valid UUID..."},
)

return stream_id_validated