Project/Java Spring Boot

[Project - Troubleshooting] LocalDateTime 변환 오류

Yn3(인삼) 2024. 5. 27. 14:14

문제 발생

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://velog.io/@sago_mungcci/%EC%8A%A4%ED%94%84%EB%A7%81-Java-8-LocalDateTime-%EC%A7%81%EB%A0%AC%ED%99%94-%EC%97%AD%EC%A7%81%EB%A0%AC%ED%99%94-%EC%98%A4%EB%A5%98

 

https://woo-chang.tistory.com/75

 

https://codemanager.tistory.com/138