FastAPI allows to define query params in Pydantic model. It works perfectly fine as long as we write non-Annotated Code but Annotated code failed to display query param metadata(description, examples) in Swagger UI.
# non-Annotated Code
class QueryParams(BaseModel):
query_param1: str | None = Field(
Query(
None,
description="Description for query-param-1.",
example="example-for-query-param-1",
)
)
query_param2: str | None = Field(
Query(
None,
description="Description for query-param-2.",
example="example-for-query-param-1",
)
)
@router.get("/")
async def get_products(query_params: QueryParams = Depends()):
...
- Annotated code failed to display query parameters metadata(description, examples) in Swagger UI.
# Annotated Code
class QueryParams(BaseModel):
query_param1: Annotated[
str | None,
Field(
Query(
description="Description for query-param-1.",
example="example-for-query-param-1",
)
),
] = None
query_param2: Annotated[
str | None,
Field(
Query(
description="Description for query-param-2.",
example="example-for-query-param-1",
)
),
] = None
@router.get("/")
async def get_products(query_params: QueryParams = Depends()):
...