HttpMessageNotReadableException 해결하기
로깅 기능 개발
로깅 기능 개발 과정을 포스팅한 적이 있다.
로그를 남기기 위해 request를 읽어야 했는데
왜 ContentCachingRequestWrapper
, ContentCachingResponseWrapper
를 사용해서 읽었을까?
request를 getInputStream()
이나 getReader()
로 두번 읽으면 다음과 같은 exception이 발생한다.
[org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing
코드를 보면 getInputStream()
이나 getReader()
는 두 번 읽어서 처리할 수 없게 되어 있다.
스프링의 유틸 클래스인 ContentCachingRequestWrapper 를 사용한 이유이다.
ContentCachingRequestWrapper는 입력 스트림 과 리더 에서 읽은 모든 내용을 캐싱한다.