Here are some bugs in dag details endpoint.

1. Calling this endpoint `dags/{dag_id}/details` returns an error due to `doc_md` field that's not nullable.

2. The dag details endpoint `GET /dags/{dag_id}/details` does not return a json if dag does not exist.

3. This endpoint does not return a `file_token` which is needed to get the source code of a DAG. And also expected judging from the documentation.

**Apache Airflow version**: 2.0


**What happened**:
1. Calling this endpoint GET /dags/{dag_id}/details returns an error
2. When the above is fixed and you look for the details of a dag that does not exist, this endpoint returns a webpage instead of json.
3. Calling the endpoint with a dag ID that exists doesn't return a file_token

**What you expected to happen**:
1. I expected it to return the details of the dag
2. I expected it to return a json indicating that the dag was not found if dag doesn't exist
3. I expected it to return a file_token in the list of fields when the dag exists

**How to reproduce it**:
Run airflow in breeze.
Make a request to `/dags/{dag_id}/details`. It will return an error.
Go to openapi.yaml and set `doc_md` to be nullable.
Make another request to see that it returns a result without a file_token.
Change the dag id to a dag ID that does not exist.
Make another request and see that it returns a webpage.

airflow/api_connexion/schemas/dag_schema.py
#
#
from typing import List, NamedTuple
from marshmallow import Schema, fields
from marshmallow_sqlalchemy import SQLAlchemySchema, auto_field
from airflow.api_connexion.schemas.common_schema import ScheduleIntervalSchema, TimeDeltaSchema, TimezoneField
from airflow.models.dag import DagModel, DagTag
class DagTagSchema(SQLAlchemySchema):
    """Dag Tag schema"""
    class Meta:
        """Meta"""
        model = DagTag
    name = auto_field()
class DAGSchema(SQLAlchemySchema):
    """DAG schema"""
    class Meta:
        """Meta"""
        model = DagModel
    dag_id = auto_field(dump_only=True)
    root_dag_id = auto_field(dump_only=True)
    is_paused = auto_field()
    is_subdag = auto_field(dump_only=True)
    fileloc = auto_field(dump_only=True)
    owners = fields.Method("get_owners", dump_only=True)
    description = auto_field(dump_only=True)
    schedule_interval = fields.Nested(ScheduleIntervalSchema)
    tags = fields.List(fields.Nested(DagTagSchema), dump_only=True)
    @staticmethod
    def get_owners(obj: DagModel):