티스토리 뷰

반응형

 

"{"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?

)

(참고 : https://stackoverflow.com/questions/53191468/no-creators-like-default-construct-exist-cannot-deserialize-from-object-valu)

 

 

 

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함