문제 발생
redis에 MemberRequestDto Object를 set 하는 과정에서 아래와 같은 오류가 발생했다.
Java 8 date/time type 'java.time.LocalDate' not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling
원인 분석
에러 로그를 보면 Java 8에서는 'java.time.LocalDateTime 형식의 date/type 형식을 지원하지 않으니 "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" 모듈을 추가하여 처리하라고 한다.
그런데 라이브러리를 확인해보니 이미 모듈을 추가되어 있었다.
모듈이 이미 추가되어 있는데 어떻게 해결할까?
일단 오류가 난 곳을 찾아보자.
오류가 난 곳은 MemberRequestDto 클래스에서 LocalDateTime 타입을 사용하는 필드였고,
좀 더 찾아보니 근본적인 이유는 LocalDateTime에 대해 (역)직렬화가 이루어지지 않아서였다.
그럼 역직렬화는 어떻게 적용해야 할까?
방법을 2가지 방법이 있다.
- 설정파일로 ObjectMapper 빈을 등록한 전역 설정하는 방법
- @JsonSerialize, @JsonDeserialize 어노테이션을 사용한 특정 필드에만 설정하는 방법
redis에서 사용할 LocalDateTime 타입의 필드만 (역)직렬화하면 되므로 특정 필드에만 설정하는 `@JsonSerializer`와 `@JsonDeserialize` 어노테이션을 사용하면 될 것 같다.
문제 해결
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
LocalDateTime 타입의 필드에 위 어노테이션들을 추가하니 해결되었다.
도움 받은 곳
https://woo-chang.tistory.com/75