기타/개발일기

[Redis 캐싱 처리] Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by default

hu6r1s 2024. 3. 24. 18:28

문제점

Redis를 이용하여 캐싱 처리를 하려고 하니 Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by default와 같은 에러가 발생하였다.

@Bean
  public CacheManager cacheManager() {
    RedisCacheManager.RedisCacheManagerBuilder builder =
        RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory());

    RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
        .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
            new GenericJackson2JsonRedisSerializer())) // Value Serializer 변경
        .disableCachingNullValues()
        .entryTtl(Duration.ofMinutes(10L));

    builder.cacheDefaults(configuration);

    return builder.build();
  }

 

구글에 검색하여 찾아보니 Redis를 통해 캐싱 처리를 하기 위한 CacheManager 설정을 하는데 여기서 LocalDateTime를 직렬화시켜 주지 못해서 발생하는 에러였다.

해결법

문제를 해결하기 위해서는 LocalDateTime을 직렬화를 할 수 있도록 해줘야 한다.

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

 

Dependency를 추가해줘야 한다.

@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm")
private final LocalDateTime createdDate;

 

LocalDateTime이 되어 있는 필드는 해당 어노테이션들을 달아주고 직렬화/역직렬화를 할 수 있도록 해준다.

이렇게 설정해주면 에러가 해결되는 것을 볼 수 있다.