티스토리 뷰
[Redis] LocalDateTime Serialization / Deserialization 삽질기 - 2
ryumodern 2021. 12. 22. 19:49위 글에서 이어지는 글이다
해결은 금방 했는데 이제야 올리게 됐다
Redis를 사용하면서 @Cacheable로 데이터를 캐싱할 때 발생했던 문제다
LocalDateTime을 JSON 형태로 직렬화 / 역직렬화할 때 LocalDateTime이 풀어 헤쳐지던 문제인데 해결은 간단했다
@JsonFormat(pattern=어쩌구, timezone=저쩌고)로도 풀 수 있지만
이 애노테이션을 모든 LocalDateTime 타입 필드에 붙여주기 귀찮으므로 전역적으로 serialize / deserialize 하는 것이다
ObjectMapper를 사용해 직렬화 / 역직렬화를 수행하는데 이를 커스텀 해주면 된다
내가 사용하는 커스텀 버전은 아래와 같다
직렬화 / 역직렬화를 수행할 때 커스텀한 이 녀석을 주입 받아 사용해야 한다
사용한 메서드들을 간략하게 설명해보자면
.findAndRegisterModules()
ObjectMapper 클래스의 메서드로써 JDK ServiceLoader에 의해 기본적으로 제공되는 모듈들을 찾아 넣어주는 것이다
.enable(SerializationFeature.INDENT_OUTPUT)
JSON 형태로 저장하거나 출력할 때 인덴트를 맞춰서 formatting 해주는 녀석이다
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
Date를 TimeStamp 형식으로 직렬화하지 못하게 하고
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
역직렬화하는 대상에 모르는 속성 (필드) 이 있더라도 역직렬화를 수행하라는 의미에서 저 속성에 false를 넣어주는 것이고
.registerModules(new JavaTimeModule(), new JsonBindingResultModule(), new DateTimeFormatModule());
여기가 핵심이다
JavaTimeModule 혹은 JDK8Module을 넣어주면 LocalDateTime 직렬화 / 역직렬화가 가능하다
JsonBindingResultModule, DateTimeFormatModule은 내가 작성한 모듈로 저게 없어도 수행에는 지장이 없다
'Spring > Spring Data' 카테고리의 다른 글
[Redis] HATEOAS와 @Cacheable - 3 (0) | 2021.12.25 |
---|---|
[Redis] HATEOAS와 @Cacheable - 2 (0) | 2021.12.22 |
[Redis] HATEOAS와 @Cacheable 같이 쓰기 (0) | 2021.10.02 |
[Redis] HATEOAS와 @Cacheable (0) | 2021.09.20 |
[Redis] LocalDateTime Serialization / Deserialization 삽질기 (0) | 2021.09.16 |