[Kotlin] java.time.* 사용시 발생하는 예외 해결 방법
들어가기 전
코프링 토이프로젝트를 진행하면서 LocalDateTime을 자바에서 사용하듯이 사용을 했는데 예외가 발생했습니다.
발생한 예외를 해결하기 위해 검색을 했는데 정보가 존재하지 않아서 해결하는데 시간을 많이 투자했습니다.
그래서 이번 포스팅에서는 예외 내용과 예외 해결하는 방법에 대해 알아보겠습니다.
예외 내용
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"
위에 예외를 해결하려고 두 가지 방식을 시도를 해봤습니다.
첫 번째 방법
예외를 해결하기 위한 의존성을 추가하는 것입니다.
build.gradle
implementation("com.fasterxml.jackson.core:jackson-databind:2.15.0")
위에 의존성을 추가를 했는데도 똑같은 예외가 발생을 하였습니다. 즉 의존성을 추가하여도 예외를 해결을 못하였습니다.
두 번째 방법
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.registerKotlinModule import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @Configuration class JacksonConfig { @Bean fun objectMapper(): ObjectMapper { val objectMapper = ObjectMapper() objectMapper.registerKotlinModule() objectMapper.registerModule(JavaTimeModule()) return objectMapper } }
위와 같은 방법으로 하니 예외가 발생하지 않고 문제를 해결할 수 있었습니다.
그렇다면 의존성을 추가했을 때는 문제가 해결되지 않았는데 두 번째 방법을 하였을 때 해결된 이유가 무엇인지에 대해 알아보겠습니다.
1. registerKotlinModule
Kotlin을 사용하는 경우 Jackson과 Kotlin 간의 상호 작용을 개선하기 위해 Kotlin 모듈을 등록해야 합니다. 해당 모듈은 Kotlin의 특정 기능 및 표준 라이브러리와의 상호 작용을 지원하여 Kotlin 클래스의 직렬화 및 역직렬화를 더 편리하게 처리할 수 있도록 도와줍니다.
2. registerModule(JavaTimeModule())
해당 모듈은 JSR-310 (Java 8의 날짜 및 시간 API)을 Jackson에 등록을 합니다. Java 8 이후에는 java.time 패키지의 LocalDateTime, LocalTime, LocalDate 외에도 날짜 및 시간 유형이 많이 사용됩니다. 이 모듈을 등록하면 Jackson은 LocalDateTime과 같은 JSR-310 날짜 및 시간 유형을 올바르게 직렬화 및 역직렬화할 수 있게 됩니다.
'Kotlin' 카테고리의 다른 글
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding) (0) | 2023.05.04 |
---|---|
[Kotlin] 기본 문법 (2) (0) | 2023.04.20 |
[Kotlin] data class VS class (0) | 2023.02.24 |
[Kotlin] 기본 문법 (1) (0) | 2023.02.19 |
댓글
이 글 공유하기
다른 글
-
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
2023.05.04들어가기 전 Kotlin에서 지원하는 문자열 대체 메서드에 대해 알아보겠습니다. 자바는 replace, replaceAll 등을 지원하는데 Kotlin 같은 경우에는 removePrefix, removeSuffix, removeRange, removeSurrounding을 지원합니다. removePrefix removePrefix의 내부는 아래사진과 같이 되어있습니다. 매개변수로 들어온 prefix값을 해당문자열의 시작단어인지를 비교하고 매개변수의 값이 시작단어일 경우 prefix의 크기만큼 문자열을 잘라 return을 해줍니다. 테스트 코드 class StringRemoveMethodTest : FreeSpec({ "removePrefix" - { "조건이 일치하면 kotlin^^을 반환한다." - {… -
[Kotlin] 기본 문법 (2)
[Kotlin] 기본 문법 (2)
2023.04.20들어가기 전 코틀린 변수 선언방법과 형변환 하는 방법에 대해 잘 모르시는 분들은 아래 링크 글을 먼저 보고 이 글을 보는 것을 추천드립니다. https://hoestory.tistory.com/49 [Kotlin] 기본 문법 (1) 들어가기 전 코틀린 기본 문법을 설명하면서 이해를 쉽게 할 수 있도록 자바 문법과 비교해 가면서 설명할 것입니다. var, val 이란? 코틀린에서는 변수나 상수를 선언을 할 때 var와 val을 사용하여 hoestory.tistory.com 제어문 자바에서는 제어문이 if문과 switch case문이 있습니다. 그런데 코틀린에서 if문과 when문이 있습니다. 공통점은 if문이 있고 차이점은 코틀린은 when문이 있습니다. fun main() { val result = ev… -
[Kotlin] data class VS class
[Kotlin] data class VS class
2023.02.24들어가기 전 코틀린에서는 class와 data class가 존재합니다. data class에 대해 설명을 하면서 일반적인 class와의 차이점을 다뤄보겠습니다. data class data class는 데이터 보관 목적인 클래스입니다. data class의 형식은 아래와 같습니다. data class DataClassExample(val name: String, val age: Int) data class는 보일러 플레이트 코드를 줄여줍니다. 보일러 플레이트 코드가 무엇인지 궁금한 분은 아래 블로그를 들어가시면 내용이 있으니 보고 이어서 내용을 보시면 좋을 거 같습니다. 보일러 플레이트란? 보일러 플레이트 들어가기 전 보일러 플레이트의 정의만 보고 "오? 보일러 플레이트코드 좋은 거 같은데 왜 보일러 플… -
[Kotlin] 기본 문법 (1)
[Kotlin] 기본 문법 (1)
2023.02.19들어가기 전 코틀린 기본 문법을 설명하면서 이해를 쉽게 할 수 있도록 자바 문법과 비교해 가면서 설명할 것입니다. var, val 이란? 코틀린에서는 변수나 상수를 선언을 할 때 var와 val을 사용하여 선언을 합니다. var : 가변의 속성을 가진 것에 선언을 합니다. val : 불변의 속성을 가진 것에 선언을 합니다. var num1 = 1 // 가변의 속성을 가졌을 경우 val num2 = 1 // 불변의 속성을 가졌을 경우 그럼 자바에서는 어떻게 변수와 상수를 나타내는지에 대해 알아보겠습니다. int num1 = 1 // 가변의 속성을 가졌을 경우 final int num2 = 2 // 불변의 속성을 가졌을 경우 속성 Java Kotlin 가변 속성 int num1 = 1 var num1 = 1…
댓글을 사용할 수 없습니다.