본문 바로가기
에러 기록

자바 - Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling ...

by 샤샤샤샤 2024. 5. 5.

발생

ObjectMapper 을 이용한 객체 직렬화 도중에 문제가 발생했다.

 

원인

에러 메시지에 나와있다.

요약하면 자바 8 LocalDateTime 을 제공하지 않으니 ' jackson-datatype-jsr310' 모듈을 추가하라는 말이다.

 

해결

먼저 jackson 버전을 확인해야 한다. jackson 2.8.0 이전 버전에는 jackson-datatype-jsr310 모듈을 추가할수 없다.다행히 내 jackson 버전은 2.15.3 버전이다.

그런데 이상한 점을 발견했다. 이미  jackson-datatype-jsr310 모듈이 추가되어 있는 것이다.

 

ObjectMapper 란?

직렬화와 역직렬화를 제공하는 Jackson 라이브러리 클래스다. 다만 복잡한 데이터 유형은 사용자가 직접 어떤 식으로 직렬화를 할지 정해주는 사용자 정의 모듈을 설정해줘야 한다.

 

LocalDateTime 의 경우 javaTimeModule 이 이미 제공한다.

 

JavaTimeModule

ObjectMapper 은 기본적으로 표준 java 라이브러리가 아닌 추가된 라이브러리르 인식하지 못한다. 따라서 이를 모듈로 설정해줘야 하는데, 이를 위해서 기본적으로 제공하는 모듈이다.

 

@Configuration
public class Config {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        return objectMapper;
    }
}

 

이와 같이 빈으로 등록할때 모듈을 지정해주면 된다.

빈으로 등록하지 않는다면 그냥 objectMapper.resterModule(new JavaTimeModule()) 코드를 작성해주면 된다.