HttpMessageNotWritableException: No converter for [VO Class] with preset Content-Type ‘null’]

Spring Boot Logo
Spring Boot Logo

안녕하세요. HttpMessageNotWritableException: No converter for [VO Class] with preset Content-Type ‘null’] 오류와 관련된 해결 포스트입니다.

Spring Boot를 공부하면서 재미삼아 백엔드 서버를 만들어 보고 있는데, 어처구니 없는 실수로 며칠을 비슷한 오류로 고생을 했는데, 저같이 실수하시는 분이 너무 없으셔서 기록으로 남겨놓습니다.

Error Message

org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter for [VO Class] with preset Content-Type 'null']

Error도 아니고 Warn 레벨로 찍히는 이 로그로 인해 많은 곤욕을 치뤘습니다.
간단하게 에러에 대해 설명하자면 이렇습니다.

Spring은 기본적으로 MessageConvertor가 탑재되어 있어 HTTP 통신을 할때 어떤 타입의 메세지가 ‘request’되고 ‘response’되던 Client에서 받아볼 수 있게 변환을 해줍니다.
대중적인 타입이 아닌 경우에는 커스터마이징을 통해 추가도 가능하며, 매우 편리하게 만들어 두었죠.

근데, 저렇게 Content-Type을 ‘null’로 찍어버리면 여러 경우의 수 (예를 들자면.. if, else if, else if 도배를 한)에서도 else나 exception 처리를 하는 경우로 빼는 상황이기에 아무도 처리해주지 않습니다.

덕분에 저의 ExceptionHandler 에게 도달해서 심각한 에러라고 리턴이 가는 상황을 며칠동안 봐야했습니다.

원인

이게 원인이었던 분은 전세계에 없었던거 같습니다.
모두들 전문가이시라…
그래도 저에게 실마리를 줬던 유일한 포스트는 아래 링크였던 것 같습니다.

https://stackoverflow.com/questions/60502811/springboot-httpmessagenotwritableexception-no-converter-for-with-preset-c

이 분은 client 환경에 따라 되고 안되고 하는 상황이었는데, 안될때의 상황이 저와 비슷해서 유심히 봤었습니다.

답을 달아주신 ‘David Guimaraes’ 분은 저에게 별 도움은 안됐고, 마지막에 GRILLON 씨가 뜬금없이 Entity 객체에 달아둔 어노테이션에 대해 디펜던시를 추가해줬다고 결론을 내려놨던게 저에게 힌트가 되었습니다.

저걸 달아주니까 해결이 됐다고? 하는 생각으로 다시 본문을 읽다가 아차 싶어 제 VO 객체를 보러 갔습니다.

VO 객체 열심히 만들어놓고 getter, setter, Json 관련 어노테이션을 달아둔다는걸 깜빡하고 안달았던겁니다.

해결

원인이 너무 허무했지만, 다행이다 싶었습니다.
코딩은 내 길이 아닌가라는 생각까지 할 정도였으니까요.

// Before Code
/* NO ANNOTATION */
public class MyVO {
...
}

// After Code
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyVO {
...
}

위 After Code와 같이 어노테이션을 추가해주고 해결이 되었습니다.

지금까지 HttpMessageNotWritableException: No converter for [VO Class] with preset Content-Type ‘null’] 오류와 관련된 해결 포스트였습니다.

Updated by 20.07.12 CentOS 7 Swap Memory 설정하기
Site : @ThinkGround
Instagram : @thinkground_official
Facebook : @ThinkGround
Twitter : @ThinkG_Flature

Leave a Reply