-
Notifications
You must be signed in to change notification settings - Fork 0
Description
FastAPI doesn't support Pydantic v2 validation_alias and serialization_alias
FastAPI does not properly support Pydantic v2's validation_alias and serialization_alias parameters for request parameters. This affects all parameter types: Query, Path, Header, Cookie, Body, Form, and File parameters.
In Pydantic v2, there is a distinction between:
validation_alias- the field name to accept during input/validationserialization_alias- the field name to use during output/serializationalias- in v1, this was used for both; in v2, it can be used to set both
Current Issues
Issue 1: validation_alias not recognized
When defining a parameter with validation_alias:
@app.get("/items")
def read_items(item_name: Annotated[str, Query(validation_alias="itemName")]):
return {"item_name": item_name}Sending a request with ?itemName=test results in a validation error. FastAPI doesn't recognize the validation_alias and looks for the Python field name instead.
Issue 2: Python field name incorrectly accepted when validation_alias is set
When validation_alias is explicitly set, sending data with the Python field name should fail validation, but it incorrectly succeeds.
Issue 3: Confusion when both alias and validation_alias are set
When both parameters are provided:
item_name: Annotated[str, Query(alias="item-name", validation_alias="itemName")]FastAPI doesn't properly distinguish between them. It should use itemName for validation (input) and item-name for serialization (output/schema).
Issue 4: Error messages and OpenAPI schema show incorrect field names
When validation fails, error messages reference incorrect field names instead of the validation_alias. Similarly, OpenAPI documentation may show incorrect parameter names.
Impact
This issue affects users migrating to or using Pydantic v2, where the alias system is more sophisticated than v1. It breaks validation for parameters that use validation_alias, prevents proper separation of input/output field names, and causes confusing error messages.
The issue manifests across all FastAPI parameter types: query parameters, path parameters, headers, cookies, request bodies, form data, and file uploads.