• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

HandlerMethodArgumentResolver의 resolveArgument()의 호출 위치

24.01.23 16:40 작성 24.01.23 16:42 수정 조회수 123

2

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
RequestMappingHandlerAdapter에서 컨트롤러의 파라메터에서 필요로 하는 객체를 반환받아서 ArgumentResolver의 supportsParameter()를 통하여 반환받은 객체가 있는지 검증 후 있으면 ArgumentResolver의 resolveArgument()를 통하여 컨트롤러를 호출해준다고 이해했습니다.

 

그런데 핸들러 어댑터 로직을 살펴보니 supportsParameter()를 통해 검증해주는 로직은 있지만 resolveArgument()를 호출해주는 로직이 존재하지 않는데 어디서 resolveArgument()를 통하여 컨트롤러를 호출할 수 있는 건지 resolveArgument()의 호출 위치가 궁금합니다 !

답변 1

답변을 작성해보세요.

2

안녕하세요. 경민님

invokeHandlerMethod()에 보시면 다음 코드를 호출하는 부분을 확인할 수 있습니다.

invocableMethod.invokeAndHandle(webRequest, mavContainer);

이 안에 가보면 다음 코드가 있습니다.

Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);

이 코드를 들어가 보면 다음 코드를 확인할 수 있습니다.

Object[] args = getMethodArgumentValues(request, mavContainer, providedArgs);

감사합니다.

경민님의 프로필

경민

질문자

2024.01.25

감사합니다!!