본문 바로가기
IT/JAVA

Cannot deserialize value of type `java.time.LocalDateTime` from String.... `0000-00-00 00:00:00` 처리 방법

by 최고영회 2020. 6. 11.
728x90
반응형
SMALL

JodaTime을 제외하고 Java에서 정식으로 LocalDate, LocalDateTime 이 지원되면서 여러가지로 Date, Time 을 사용하는데 편해졌다. 

그런데 기존 legacy project 에서는 DateTime 의 값을 String에 담고 있으며 

format은 yyyy-MM-dd HH:mm:ss 이며 이 legacy 프로젝트로 부터 값을 가져와 parsing 해야 하는 상황이 발생했다. 

이런 경우 아래와 같은 오류가 발생한다. 

org.springframework.core.codec.DecodingException: 
JSON decoding error: 
Cannot deserialize value of type `java.time.LocalDateTime` from String \"2017-02-06 15:38:23\": 
Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) 
Text '2017-02-06 15:38:23' could not be parsed at index 10; 
nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException....

변환할 수 없단다...

해결 방법은 간단하다.  fasterxml 이 잘 알아들을 수 있도록 pom.xml 에 jsr310 dependency를 추가 해 준다.

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

그리고 DTO 의 LocalDateTime type 의 변수에 jsonFormatter를 선언해 준다.

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createDate;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime expiredDate;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lastAccessDate;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime pwChangeDate;

잘 된다..

그런데 data 중 0000-00-00 00:00:00 이라는 값이 있다. 

LocalDateTime 에서 0000 이라는 year 값은 있을 수 없으니 당연히 에러가 발생한다. 

org.springframework.core.codec.DecodingException: 
JSON decoding error: Cannot deserialize value of type `java.time.LocalDateTime` 
from String \"0000-00-00 00:00:00\": 
Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) 
Text '0000-00-00 00:00:00' could not be parsed at index 10; ...

이건... 처리방법을 모르겠다... 그래서 legacy 쪽 데이터를 가지고 오는 API 의 Query를 변경했다.

...
IF(lock_date = '0000-00-00 00:00:00', '', DATE_FORMAT(lock_date, '%Y-%m-%d %H:%i:%s')) AS lockDate
..

잘된다...

생각하지 못한 부분 때문에 아까운 시간이 소비 되었네..ㅠㅠ

728x90
반응형
LIST