Development/Android

[Android] Error Body로 Api 통신 실패 내용 확인하기

SeungYong.Lee 2023. 11. 20. 10:05
반응형

Api 통신 중, Error Status로 반환되는 경우에는 Result Body를 일반적인 response body로 가져올 수 없다.

resonse의 errorBody()를 활용해야 Error Result Body를 가져올 수 있다.

{
  "code": "INVALID_AUTH_TOKEN",
  "message": "invalid token"
}

 

먼저 다음과 같은 data class를 준비한다.

data class NormalErrorResponse(
    val code: String?,
    val message: String?
)

 

제네릭을 활용하여 Error Response를 data class로 변환해 주는 함수를 구현했다.

inline을 통해 해당 성능 손실을 줄이고, <reified T>를 통해 런타임 시에도 타입 정보를 유지하도록 했다.

TypeToken에서 gson으로 타입 변환 시, 실패하면 null을 반환하도록 했다.

inline fun <reified T> ResponseBody.parse(): T? {
    val gson = Gson()
    val type = object : TypeToken<T>() {}.type
    return gson.fromJson(charStream(), type)
}

 

 

return if (response.isSuccessful) {
    ApiTaskResult(true)
} else {
    val errResponse: NormalErrorResponse? = response.errorBody()?.parse<NormalErrorResponse>()
    ApiTaskResult(false, errResponse?.message)
}

 이제 위와 같이 활용하여 필요한 형식의 data class만 지정해주면 Error Response 변환이 용이해진다.

반응형