Currently if an API URL that does not exist is requested, an html page is returned instead of JSON

**Apache Airflow version**:2.0

**What happened**:
Making a request against an endpoint that does not exist returns an html page

**What you expected to happen**:

I expected it to return 404 error in JSON indicating that the URL was not found

**How to reproduce it**:
1. Start airflow website and scheduler in breeze.
2. Make a request against an endpoint that does not exist e.g http://localhost:28080/api/v1/getconnectiond
3. Notice that an html page is returned instead of a json
cc: @mik-laj 

airflow/www/extensions/init_views.py
"""Add custom errors handlers"""
    from airflow.www import views
    app.register_error_handler(500, views.show_traceback)
    app.register_error_handler(404, views.circles)
def init_api_connexion(app: Flask) -> None:
    """Initialize Stable API"""
    spec_dir = path.join(ROOT_APP_DIR, 'api_connexion', 'openapi')
    connexion_app = connexion.App(__name__, specification_dir=spec_dir, skip_error_handlers=True)
    connexion_app.app = app
    api_bp = connexion_app.add_api(
        specification='v1.yaml', base_path='/api/v1', validate_responses=True, strict_validation=True
    ).blueprint
    app.register_error_handler(ProblemException, common_error_handler)
    app.extensions['csrf'].exempt(api_bp)
def init_api_experimental(app):
    """Initialize Experimental API"""
    from airflow.www.api.experimental import endpoints
    app.register_blueprint(endpoints.api_experimental, url_prefix='/api/experimental')
    app.extensions['csrf'].exempt(endpoints.api_experimental)