#코드는 원본가셔서 추가하는거 추천드려요
from fastapi import FastAPI, File, UploadFile, Response, status, Form, Request, APIRouter
from fastapi.responses import PlainTextResponse, StreamingResponse
from fastapi.exceptions import RequestValidationError
from fastapi.routing import APIRoute
from typing import Callable
from typing import List
class ValidationErrorLoggingRoute(APIRoute):
def get_route_handler(self) -> Callable:
original_route_handler = super().get_route_handler()
async def custom_route_handler(request: Request) -> Response:
try:
return await original_route_handler(request)
except RequestValidationError as exc:
body = await request.body()
detail = {"errors": exc.errors(), "body": body.decode()}
raise HTTPException(status_code=422, detail=detail)
print(detail)
return custom_route_handler
app = FastAPI()
app.router.route_class = ValidationErrorLoggingRoute
이러면 일단 422붙은거 무시하고 함수내로 진입가능했음
swagger의 api테스트로는 res 200이 나오는데,실제로 프론트를 거쳐보면 422가 떠서 어떻게해결하지 좀 오래찾았는데
fastapi에서 request body를 열어볼 방법이 없어서(헤더는 쉽게 받을수있는데 body는 외부 의존성 구조상 안되는거같아보였음..)
일단 저거 넣어서 해결했음
스프링도 바디열면 깨지는건 같았던거같긴한데 어떻게 받아서 처리하는걸 본거같은데
아마 입력값의 형식이랑 기대하는 형식이랑 달라서 뜨는거같음(fastapi 자체적으로 뭘 하나봄)
일단 에러는 에러니 해결하고나서 지우는걸 추천하는데(예외 저렇게 넘겨서 좋은꼴을 본적이없음),저거로 받아서 console로 찍어볼순 있으니 테스트용으로 쓰자
나도 스프링하던가해야지 뭐 검색해서 나오는게없어서 드럽게힘드네
'python' 카테고리의 다른 글
파이썬의 dotenv의 load_dotenv()로 불러온 값이 최신화가 안될때 (0) | 2025.04.04 |
---|---|
fastapi에서 파일입출력을 할때 한글파일이름일때 처리방법 (0) | 2022.12.21 |
pydub에서 io.bytesio()를 읽을때 오류해결 (0) | 2022.12.21 |