Skip to content

generated issue 14371 #7

@rigelbm

Description

@rigelbm

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/validation
  • serialization_alias - the field name to use during output/serialization
  • alias - 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions