티스토리 뷰
Kotlin & JPA
[Kotlin] Deserialize cannot deserialize from Object value (no delegate- or property-based Creator). 에러 해결
Jane Kwon 2024. 1. 23. 16:33반응형
"{"code": "INVALID_NUMBER", "message": "번호가 유효하지 않습니다."}" 형태로 떨어지는 에러 응답을
feign client error decorder를 이용해서 ObjectMapper로 객체화시키고자 하였다.
class ClientErrorDecoder : ErrorDecoder {
override fun decode(methodKey: String?, response: Response): Exception {
val exception = ObjectMapper().readValue(response.body().asInputStream(), BaseExceptionResponse::class.java)
return if (response.status() in 400..499) {
IllegalArgumentException(exception.message)
} else ClientCommunicationException(exception.message)
}
}
그런데 아래와 같이 deserialization 하는 과정에서 에러가 난다.
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `Object` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
구글링 해보니 변환할 Object에 기본 생성자가 없기 때문이란다.
구글링 해서 나온 방법을 보니 아래와 같이 의존성을 추가하면 된다는데 이미 우린 포함되어 있었다.
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
코틀린의 경우는 기본 생성자를 만들 수 없으니
다른 방법으로, 적어도 아래 두가지 방법 중 하나를 선택해서
변환할 객체의 기본 빈 생성자를 생성해주도록 하면 문제가 해결될 것이다.
data class BaseExceptionResponse(
val code: String = "",
val message: String? = null
)
data class BaseExceptionResponse @JsonCreator constructor(
@JsonProperty("code")
val code: String,
@JsonProperty("message")
val message: String?
)
반응형
'Kotlin & JPA' 카테고리의 다른 글
[Kotlin] FTP 접속 후 파일 다운로드 (1) | 2024.06.11 |
---|---|
[Kotlin] 'WebSecurityConfigurerAdapter' is deprecated. Deprecated in Java 해결 (0) | 2024.05.10 |
[Kotlin][Gradle] 'getter for buildDir: File' is deprecated. (0) | 2024.01.08 |
[kotlin] long timestamp to LocalDateTime 변환 (0) | 2023.11.07 |
[Kotlin][Gradle] openApiGenerate date / data-time LocalDate / LocalDateTime 으로 사용하기 (0) | 2023.10.24 |