Deep Dive /Java Web /17-R1

17-R1. Controller → DispatcherServlet: Object / ResponseEntity 반환

REST 경로에서는 컨트롤러가 ModelAndView 대신 객체나 ResponseEntity를 반환합니다. Spring은 이 반환값을 받아 뷰 렌더링이 아닌 응답 본문 작성 경로로 보냅니다.


이번 단계의 역할

컨트롤러 반환값이 “뷰”가 아니라 “응답 본문”이라는 사실이 확정되는 단계입니다.


호출 흐름 요약

  1. 컨트롤러 메서드가 객체 또는 ResponseEntity를 반환합니다.
  2. doInvoke(args)가 반환값을 받습니다.
  3. ServletInvocableHandlerMethod.invokeAndHandle()가 반환값 처리기로 넘깁니다.
  4. 이후 HandlerMethodReturnValueHandler가 응답 본문 작성을 맡습니다.

호출 흐름 다이어그램

sequenceDiagram participant Controller participant IHM as InvocableHandlerMethod participant SIHM as ServletInvocableHandlerMethod participant Handler as ReturnValueHandler Controller-->>IHM: Object / ResponseEntity IHM-->>SIHM: returnValue SIHM->>Handler: handleReturnValue(...)

핵심 코드

// InvocableHandlerMethod.java
Object returnValue = doInvoke(args);
// ServletInvocableHandlerMethod.java
this.returnValueHandlers.handleReturnValue(
        returnValue, getReturnValueType(returnValue), mavContainer, webRequest);

코드 해설

HTML 경로와 달리 여기서는 view name 해석이 아니라, 반환 객체를 HTTP body에 어떻게 쓸지 결정하는 단계로 넘어갑니다.


설계 의도

컨트롤러가 객체만 반환해도 REST 응답을 만들 수 있게 하기 위한 반환값 처리 구조입니다.


다음 단계 연결

다음 문서 17-R2에서는 HandlerMethodReturnValueHandler.handleReturnValue()가 실제로 호출되는 장면을 봅니다.

← 이전: 17-V8. DispatcherServlet → Browser: HTTP Response (HTML) | 다음: 17-R2. DispatcherServlet → HandlerMethodReturnValueHandler