스프링 Java 8 LocalDateTime 직렬화 역직렬화 오류(1)

SaGo_MunGcci·2022년 9월 21일
3

스프링

목록 보기
26/31
post-thumbnail

Trouble Access

redis를 적용하던 도중 이런 오류가 발생했다.

이건 고민할 문제가 아니라고 판단하여 구글링을 진행하였다.



Trouble Shooting

Java 8 date/time type java.time.LocalDateTime not supported by default 라는 오류는

LocalDataTime을 역직렬화하지 못해서 생기는 오류이다.

gradle에 아래와 같이 추가하고

//자바 역직렬화 문제 해결 패키지
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
implementation 'com.fasterxml.jackson.core:jackson-databind'

해당 LocalDateTime이 있는 클래스에 가서 @JsonSerialize, @JsonDeserialize 어노테이션을 기입해줘야 한다. 그렇지 않으면 오류가 발생한다. (나는 Timestamped라는 클래스를 따로 만들어서 createdAt, modifiedAt을 상속해서 사용했다)


package com.sparta.ddang.util;


import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class TimestampedChat {
    
    // Java 8 date/time type java.time.LocalDateTime not supported by default
    // LocalDataTime을 역직렬화하지 못해서 생기는 문제입니다.
    // 추가적으로 만약 캐시로 사용할 객체에 LocalDateTime 타입의 값이
    // 존재한다면 위처럼 @JsonSerialize, @JsonDeserialize 어노테이션을 기입해줘야 합니다.
    // 그렇지 않으면 오류가 발생합니다.
    
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @CreatedDate
    private LocalDateTime createdAt;

    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @LastModifiedDate
    private LocalDateTime modifiedAt;

}



Retrospection

  • 정상적으로 작동한다.


profile
이리저리 생각만 많은 사고뭉치입니다.

1개의 댓글

comment-user-thumbnail
2023년 6월 11일

감사합니다..

답글 달기