FastAPI에서 요청을 확인할 때 매개변수가 누락되거나 유효하지 않은 경우, FastAPI는 RequestValidationError 예외를 발생시킵니다. 기본적으로 이 예외는 422 Unprocessable Entity 응답을 반환합니다. 그러나 특정 경로에 대해 이 응답을 사용자 정의할 수 있습니다. 이를 달성하기 위한 몇 가지 접근 방식은 다음과 같습니다.
RequestValidationError에 대한 기본 예외 처리기를 재정의하고 원하는 항목에 대한 사용자 지정 응답을 제공합니다. 경로.
from fastapi import FastAPI, Request, status, HTTPException from fastapi.responses import JSONResponse from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError app = FastAPI() routes_with_custom_exception = ['/'] @app.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): if request.url.path in routes_with_custom_exception: return JSONResponse(content={'401': 'Unauthorized'}, status_code=401)
하위 애플리케이션을 생성하고 해당 애플리케이션을 기본 앱에 마운트합니다. 특정 경로. 하위 애플리케이션에서 RequestValidationError에 대한 예외 처리기를 재정의합니다.
from fastapi import FastAPI, RequestValidationError, HTTPException from fastapi.responses import JSONResponse app = FastAPI() subapi = FastAPI() @subapi.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse(content={'401': 'Unauthorized'}, status_code=401) app.mount('/sub', subapi)
사용자 정의 APIRoute 하위 클래스를 생성하고 재정의합니다. get_route_handler 메소드. 이를 통해 요청을 가로채고 RequestValidationError 예외를 처리할 수 있습니다.
from fastapi import FastAPI from fastapi.routing import APIRoute from fastapi.responses import JSONResponse from fastapi.exceptions import RequestValidationError from fastapi.requests import Request class ValidationErrorHandlingRoute(APIRoute): def get_route_handler(self): original_route_handler = super().get_route_handler() async def custom_route_handler(request: Request): try: return await original_route_handler(request) except RequestValidationError as e: return JSONResponse(content={'401': 'Unauthorized'}, status_code=401) return custom_route_handler app = FastAPI() router = APIRouter(route_class=ValidationErrorHandlingRoute) @app.get('/') async def main(): return {'message': 'Hello from main API'} @router.get('/custom') async def custom_route(some_custom_header: str = Header(...)): return {'some-custom-header': some_custom_header} app.include_router(router)
위 내용은 특정 경로에 대한 FastAPI\의 오류 응답을 사용자 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!