인프런 커뮤니티 질문&답변
HandlerAdapter의 응답 형태
작성
·
85
0
HTTP응답을 사용하는 경우, 핸들러어댑터는 DispatcherServlet에게 ModelAndView가 아닌 null을 반환하나요?
뷰 템플릿을 사용하는 경우, 핸들러어댑터는 항상 ModelAndView 형식을 반환하나요?
컨트롤러에서 반환값이 ModelAndView라면, returnValueHandler에서 그대로 ModlAndView 형태로 반환
컨트롤러 반환값이 viewName이라면, returnValueHandler에서 ModelAndView로 변환해서 반환
Spring MVC의 다양한 핸들러 어댑터는항상 ModelAndView 형식또는 null만 반환하나요?
제가 이해한 것이 맞을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 장은혜님,
HandlerAdapter의 동작 방식과 관련해서 질문 주셨네요. 이를 이해하기 위해서는 Spring MVC의 흐름을 잘 파악하는 것이 중요합니다.
HTTP 응답을 사용하는 경우:
- 컨트롤러 메소드가
@ResponseBody어노테이션이나@RestController로 선언된 경우, 응답본문에 직접 데이터를 작성합니다. 이 경우에는 ReturnValueHandler가 데이터 변환을 담당하며 View에 대한 처리가 생략되기 때문에, HandlerAdapter는 DispatcherServlet에게 ModelAndView 대신 처리한 결과나null을 반환하게 됩니다. 이때 메시지 컨버터가 작동하여 응답 본문을 생성합니다.
- 컨트롤러 메소드가
뷰 템플릿을 사용하는 경우:
- 뷰 템플릿을 사용하는 경우에는 컨트롤러가 반환한 값을 통해 ReturnValueHandler에서 ModelAndView 객체가 생성됩니다.
- 만약 컨트롤러가 그냥
String타입의 viewName을 반환하면 ReturnValueHandler가 이를 ModelAndView로 변환하여 반환합니다.
- 뷰 템플릿을 사용하는 경우에는 컨트롤러가 반환한 값을 통해 ReturnValueHandler에서 ModelAndView 객체가 생성됩니다.
Spring MVC의 다양한 HandlerAdapter:
- 일반적으로 Spring MVC에서 사용되는 HandlerAdapter는 결국 View와의 연결을 위해 ModelAndView를 반환하거나,
@ResponseBody등의 처리를 통해 직접 응답하는 경우에는null을 반환합니다. 하지만 이러한 구조는 프레임워크 내부에서 많은 유연성과 확장성을 갖고 있어 경우에 따라 다른 형태의 반환도 가능할 수 있으니, 기본적인 형태로 ModelAndView와 null로 이해하면 대부분 합리적입니다.
- 일반적으로 Spring MVC에서 사용되는 HandlerAdapter는 결국 View와의 연결을 위해 ModelAndView를 반환하거나,
아래의 게시물에서는 여러분이 질문하신 내용과 유사한 주제를 다루고 있습니다:
- View와 ReturnValueHandler
- HTTP 메시지 컨버터 사용 시 핸들러 어댑터의 반환 값
- html 대신 객체를 반환할 때 Dispatcher Servlet에서는 어떻게 처리가 되는걸까요??
이 게시물에서 더 구체적인 사례와 설명을 확인하시길 추천드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




