fastapi response_model typing泛型实现统一json格式,类似Java的Result规定统一返回
时间: 2023-07-20 14:19:36 浏览: 230
你可以使用FastAPI中的Response类来实现统一的JSON格式返回。Response类允许你定义返回的数据类型以及HTTP状态码,这样你就可以在整个应用程序中使用统一的返回格式。
下面是一个示例,展示如何使用Response类和自定义的Result类来实现统一的JSON格式返回:
```python
from fastapi import FastAPI, Response
from pydantic import BaseModel
from typing import Generic, TypeVar, List
app = FastAPI()
T = TypeVar('T')
class Result(Generic[T]):
success: bool
data: T
error: str = None
class Item(BaseModel):
name: str
description: str = None
@app.post("/items/", response_model=Result[List[Item]])
async def create_item(item: Item, response: Response):
items = [Item(name=item.name, description=item.description), Item(name=item.name, description=item.description)]
result = Result(success=True, data=items)
response.status_code = 200 if result.success else 400
return result
```
在上面的代码中,我们定义了一个自定义的Result类,用于统一的JSON格式返回。在create_item路由函数中,我们将response_model参数设置为Result[List[Item]],这意味着返回的数据是一个Result对象,其中data属性是一个Item对象的列表。在函数中,我们创建了一个包含两个Item对象的列表,并将其赋值给Result对象的data属性。然后,我们将Result对象作为返回值返回,并将HTTP状态码也设置为200或400,具体取决于Result对象的success属性。
这样,你就可以在整个应用程序中使用统一的JSON格式返回了。
阅读全文