해결된 질문
작성
·
373
·
수정됨
1
바로 전 강의에서 컨트롤러의 파라미터 타입이나 반환 타입에 따라 메시지 컨버터를 순차적으로 돌면서 찾아 수행한다고 하셨는데
아큐먼트 리졸버도 마찬가지로 적절한 파라미터 타입이나 반환타입에 따라 여러 종류가 있다고 하셨습니다.
그러면 디스패처 서블릿에서 파라미터 타입에 따른 적절한 아규먼트 리졸버를 찾아 호출하게 된다면 메시지 컨버터를 순차적으로 돌며 찾는 과정은 없어도 되는거 아닌가요?
만약 존재한다면 어디에서 이루어지는건가요?
ReturnValueHandler도 반환타입에 따라 종류가 여러 가지라고 하셨는데 이 ReturnValueHandler 종류를 찾고 호출하는 건 어디에서 이루어지는건가요?
핸들러 어댑터는 디스패처 서블릿으로 ModelAndView를 반환해야 되는데
그러면 ReturnValueHandler가 HTTP 메시지 컨버터를 호출해서 만든 응답결과가 ModelAndView 타입이고 이 응답결과를 핸들러 어댑터로 반환한 후 다시 핸들러 어댑터는 디스패처 서블릿으로 반환하는건가요?
답변 1
1
안녕하세요. gelab님
메시지 컨버터는 @RequestBody, @ResponseBody 등에서 사용됩니다. 아규먼트 리졸버중에 @RequestBody, @ResponseBody를 처리하는 아규먼트 리졸버가 있습니다. 이 아규먼트 리졸버 내부에서 메시지 컨버터를 호출합니다.
크게 보면 RequestMappingHandlerAdapter이라는 곳에서 이루어집니다.
ReturnValueHandler의 결과가 ModelAndView를 만드는 값에 영향을 줍니다.
추가로 더 깊이있게 알아보고 싶으시다면 RequestMappingHandlerAdapter.invokeHandlerMethod() 메서드에 디버깅 모드를 걸어서 확인해보시면 원하시는 내용들을 더 깊이있게 파악하실 수 있을거에요^^
감사합니다.