-1

I am trying to validate the JSON request and based on that I want to return the response code using Fast API. By default, Fast API returns 422 for validation exceptions, but I want to follow the Open API standards and as per that ideally, it should be 400 for validation exceptions. Hence, in order to achieve that, I developed something like below:

class Item(BaseModel):
    id: str
    value: str


class Message(BaseModel):
    message: str

responses = {400: {"model": Message, "description": "The item was not found"}}


@app.post("/v1/validate", response_model=Item,
          responses={**responses, 200: {"content": "valid"}})
def output_port_validate(provisioning_request: ProvisioningRequest):
    result = ApiController(dbt_provisioner).validate_request(provisioning_request)
    if result:
        return result
    else:
        return Response(status_code=400, content={"message": "Item not found"})

However, it is giving me 500 internal server error in response to the below error:

raise ResponseValidationError(
fastapi.exceptions.ResponseValidationError

I followed the official documentation but had no luck.

P.S. I have standard data classes as models, not the Pydantic ones.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
whatsinthename
  • 1,828
  • 20
  • 59

1 Answers1

0

Replace the "content" key in 200 response to something else like say "message" etc. and it will work. It seems like you cannot use "content" as a key in responses as OpenAPI may be using it for parsing. For example:

responses={**responses, 200: {"message": "valid"}}
Rishi Mehta
  • 399
  • 3
  • 10