Deep Dive /Java Web /12-1

12-1. AbstractJackson2HttpMessageConverter → ObjectMapper: readValue()

이 단계는 HTTP 본문(JSON)을 DTO 객체로 역직렬화하는 단계입니다.


이번 단계의 역할

컨트롤러 파라미터 후보가 될 DTO를 요청 본문에서 생성하는 단계입니다.


호출 흐름 요약

  1. RequestResponseBodyMethodProcessor가 메시지 컨버터 읽기를 요청합니다.
  2. AbstractJackson2HttpMessageConverterJavaType을 계산합니다.
  3. ObjectMapper.reader().forType(...)를 구성합니다.
  4. readValue(...)가 실행되어 DTO 객체가 만들어집니다.

호출 흐름 다이어그램

sequenceDiagram participant RR as RequestResponseBodyMethodProcessor participant Conv as AbstractJackson2HttpMessageConverter participant Mapper as ObjectMapper participant DTO RR->>Conv: readWithMessageConverters(...) Conv->>Mapper: reader().forType(javaType).readValue(...) Mapper-->>Conv: DTO Conv-->>RR: DTO RR-->>DTO: 파라미터 후보

핵심 코드

// AbstractJackson2HttpMessageConverter.java
JavaType javaType = getJavaType(type, contextClass);
ObjectReader objectReader = objectMapper.reader().forType(javaType);
return objectReader.readValue(inputStream);

코드 해설

이 단계는 순수 역직렬화 단계입니다. 아직 검증은 시작되지 않았고, JSON이 정상적으로 객체로 바뀌어야만 다음 단계로 넘어갈 수 있습니다.


설계 의도

역직렬화와 검증을 분리해, 파싱 실패를 먼저 드러내고 이후 단계 책임을 명확히 나누기 위한 구조입니다.


다음 단계 연결

다음 문서 12-2에서는 생성된 DTO에 대해 WebDataBinderSmartValidator가 검증을 수행하는 과정을 봅니다.

← 이전: 12. DispatcherServlet → HandlerMethodArgumentResolver | 다음: 12-2. WebDataBinder → SmartValidator