Open
Description
Q&A (please complete the following information)
- OS: Windows 11
- Browser: Chrome
- Version: 134.0.6998.179
- Method of installation: pip with fastapi
- Swagger-UI version: 3.10.0
- Swagger/OpenAPI version: OAS 3.1
Describe the bug you're encountering
having problems with dicts used in get requests
To reproduce...
Steps to reproduce the behavior:
write pydantic + fastapi code
import json
from typing import Optional, List
from fastapi import FastAPI, APIRouter, Query, Request, Response
from fastapi.responses import JSONResponse
from pydantic import BaseModel, Field
from pydantic import ConfigDict, field_validator
app = FastAPI()
class AdBase(BaseModel):
id: str
title: str
owner: Optional[str] = None
doc_id: Optional[List[str]] = None
class AdGetRequest(AdBase):
page: int = Field(0, gt=-1)
filters: Optional[dict] = Field(
default=None,
example={"location": ["Ankara", "İstanbul"], "position_title": "Yazılım"}
)
owner: Optional[str] = Field(None)
doc_id: Optional[List[str]] = Field(None)
model_config = ConfigDict(extra="ignore")
@field_validator("filters", mode="before")
def parse_filters(cls, value):
if value is None:
return value
if isinstance(value, str):
try:
return json.loads(value)
except json.JSONDecodeError:
raise ValueError("filters must be a valid JSON string representing a dictionary")
return value
@app.get("/management")
async def get_ads(request: Request, ad: AdGetRequest = Query(...)):
print(f"Received Filters: {ad.filters}")
return JSONResponse(content={"message": "Filters received","filters": ad.filters})
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
Expected behavior
url should be:
localhost:8002/DB/ad/management?page=0&filters={"location": ["Ankara", "İstanbul"], "position_title": "Yazılım"}
not:
localhost:8002/DB/ad/management?page=0&location=["Ankara","İstanbul"]&position_title=Yazılım
filters missing.
Screenshots
The request is wrong, it's not usable.
Metadata
Metadata
Assignees
Labels
No labels