Skip to content

How to customize API validation error response in Flask #564

Open

Description

@rohan-97

Actual Behavior

Getting generic resposne on validation error

{
    "errors": [
        {
            "class": "<class 'openapi_core.validation.schemas.exceptions.InvalidSchemaValue'>",
            "status": 400,
            "title": "Value {'flag': 'testF'} not valid for schema of type object: (<ValidationError: \"'testF' is too short\">,)"
        }
    ]
}

Expected Behavior

We should be able to generate custom responses, and should be able to capture the validation error info e.g. status code, validation error message, and title

Steps to Reproduce

I set up a flask server and followed the instructions provided here

Currently openapi-core is validating the incoming requets properly, however the response generated is as follows

{
    "errors": [
        {
            "class": "<class 'openapi_core.validation.schemas.exceptions.InvalidSchemaValue'>",
            "status": 400,
            "title": "Value {'flag': 'testF'} not valid for schema of type object: (<ValidationError: \"'testF' is too short\">,)"
        }
    ]
}

I want to customize the response body as per my application,

I wanted to know if is there any provision using which we can provide custom responses.

or even if we somehow capture the validation error info e.g. status code, validation error message, and title then we can generate our own response with the available information.

Thanks in advance

OpenAPI Core Version

0.17.1

OpenAPI Core Integration

Flask

Affected Area(s)

No response

References

No response

Anything else we need to know?

No response

Would you like to implement a fix?

None

Activity

  1. p1c2u commented on Apr 28, 2023

    @p1c2u
    Collaborator

    Hi @rohan-97

    thanks for the report. Errors handling customization is one of the topics missing in current documentation (I didn't add this to the documentation because of missing well-defined interface and possible interface changes in near future). Currently it's possible customize errors handling by passing your own handler class with openapi_errors_handler parameter (See decorator and default errors handler). So most likely you would want to inherit from FlaskOpenAPIErrorsHandler class.

  2. rohan-97 commented on Apr 28, 2023

    @rohan-97
    Author

    Thanks @p1c2u for the quick response,
    I was able to customize the response by inheriting FlaskOpenAPIErrorsHandler class.

    I believe this is really nice feature to have, and should be documented,
    I'll keep this issue open so that this can be documented in future

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions