문제점
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이 되어 있는 필드는 해당 어노테이션들을 달아주고 직렬화/역직렬화를 할 수 있도록 해준다.
이렇게 설정해주면 에러가 해결되는 것을 볼 수 있다.
'기타 > 개발일기' 카테고리의 다른 글
좋은 코드란 무엇일까? (0) | 2024.08.31 |
---|---|
대용량 트래픽을 처리하는 방법 (1) | 2024.06.09 |
[Spring Boot] Redis로 캐싱 처리 적용하기 (0) | 2024.03.24 |
[Spring Security] JWT 특성을 이용한 인증 처리 리팩토링 (0) | 2024.03.21 |
Spring Boot에서 Redis 사용하기 (0) | 2024.03.15 |