Backend/Redis

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type java.time.LocalDateTime not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"

kimdozzi 2024. 8. 25. 11:03

 

리펙토링 중인 프로젝트의 엔티티에는 챌린지 startedDate, completedDate 컬럼이 존재하는데, 해당 컬럼의 타입은 LocalDateTime이었다. 해당 데이터를 직렬화하고 Redis에 저장한 후, 캐시 데이터를 조회할 때 역직렬화 과정을 거쳐야하는데 Jackson 라이브러리에서 LocalDate, LocalTime, LocalDateTime을 지원하지 않았다.

 

이를 처리하도록 사용하려면 com.fastxml.jackson.datatype:jsr310 모듈을 추가해야한다는 경고가 나타났고, 아래와 같이 추가해주었다. 그러나, 문제는 해결되지 않았다. Jackson을 공부하면서 ObjectMapper에 대한 이해가 필요함을 느꼈다. 

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

 

 

 

 

ObjectMapper

Java에서 JSON을 다루는 데 사용되는 Jackson 라이브러리의 주요 클래스로 JSON과 Java 객체 간의 변환을 담당한다. 컬렉션 타입, 날짜/시간 타입과 같은 복잡한 데이터 유형을 적절하게 처리하기 위해서는 사용자 정의 모듈을 추가해주어야 한다. 나는 LocalDateTime을 사용하기 위해 JavaTimeModule이 필요했다. ObjectMapper에 JavaTimeModule을 등록하고 스프링 빈으로 등록주었고, 이제 날짜/시간 타입에 대해서도 직렬화 및 역직렬화가 정상적으로 동작하게 되었다.

@Configuration
public class ModuleConfig {

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

 

 

 

 


참고 자료