17-R1. Controller → DispatcherServlet: Object / ResponseEntity 반환
REST 경로에서는 컨트롤러가 ModelAndView 대신 객체나 ResponseEntity를 반환합니다.
Spring은 이 반환값을 받아 뷰 렌더링이 아닌 응답 본문 작성 경로로 보냅니다.
이번 단계의 역할
컨트롤러 반환값이 “뷰”가 아니라 “응답 본문”이라는 사실이 확정되는 단계입니다.
호출 흐름 요약
- 컨트롤러 메서드가 객체 또는
ResponseEntity를 반환합니다. doInvoke(args)가 반환값을 받습니다.ServletInvocableHandlerMethod.invokeAndHandle()가 반환값 처리기로 넘깁니다.- 이후
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