훈훈훈
Spring boot :: LocalDate Deserialize(serialize) 이슈 정리 본문
Spring Framework/Kotlin
Spring boot :: LocalDate Deserialize(serialize) 이슈 정리
훈훈훈 2020. 8. 30. 18:00Spring boot와 Kotlin(코틀린)으로 Application 개발 중에 Jackson 라이브러리에서 LocalDate 타입을 Deserialize(serialize)를 하면서 발생했던 이슈를 정리해보려고 한다.
- 오류 메시지
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDate` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value
- 문제 상황
Application A에서 Application B로 Request를 날리고 Response를 받을 때 LocalDate을 Deserialize를 하지 못해 발생
- 문제 원인
LocalDate(Time)은 Java 8에서 새로 만들어진 타입
문제는 Jackson 라이브러리가 String 타입으로 표현된 데이터를 Deserialize 시 LocalDate를 제대로 변환하지 못하는 현상 발생
해당 내용은 baeldung에서 참고하였으며 자세한 내용은 해당 사이트에서 확인할 수 있다.
- 해결방법
먼저 Gradle 사용 시 아래와 같이 jsr310 의존성 추가
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310')
그리고 DTO나 Model에서 아래와 같이 어노테이션 추가
data class exampleDTO(
@JsonDeserialize(using = LocalDateDeserializer::class)
val uploadDate: LocalDate,
)
Controller에서는 별도 수정 없이 아래와 같은 코드 사용
@GetMapping("/exampleApplicationA")
fun exampleController(): ResponseEntity<List<exampleDTO>> {
val response = khttp.get(
url = "exampleURL"
)
val mappedResponse: List<exampleDTO> = objectMapper.readValue(res.content)
return ResponseEntity.ok(mappedResponse)
}
위와 같이 코드를 수정 후 어플리케이션을 실행시키면 정상적으로 Response를 받는 것을 확인할 수 있다.
'Spring Framework > Kotlin' 카테고리의 다른 글
Spring boot :: Multipart upload API using Amazon S3 API 구현 과정 정리 (0) | 2020.11.09 |
---|---|
Spring boot :: Kotlin으로 Event Listener 사용하기 (0) | 2020.07.27 |
Spring Boot :: Kotlin과 JPA를 사용하여 간단한 API 만들기 (4) | 2020.06.14 |
Spring Boot :: Kotlin으로 간단한 CRUD API 만들기 (3) | 2020.05.30 |
Comments