기타/개발일기
[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이 되어 있는 필드는 해당 어노테이션들을 달아주고 직렬화/역직렬화를 할 수 있도록 해준다.
이렇게 설정해주면 에러가 해결되는 것을 볼 수 있다.