API를 이용하다보면 에러시 응답코드와 설명을 주는 경우가 있다. API를 만들때 모든 백엔드가 고려하는 상황이며 API를 사용하는 사람은 어디서 어떤 이유때문에 에러가 발생했는지 알 수 있어야한다.
data class ErrorResponse(
val code : String?,
val description : String?
)
파싱이란?
다른 형식으로 저장된 데이터를 원하는 형식의 데이터로 변환하는 것을 의미한다
JSON 파싱이란 JSON형식의 문자열을 객체로 변환하는 것이다.
fun showErrorLog(response : ResponseBody?){
val errorMessage = Jsons.gson().fromJson(response?.string(), ErrorResponse::class.java)
Log.e("ERROR","${errorMessage.description}")
Log.e("ERROR","${errorMessage.code}")
}
gson을 이용하여 생성자로 받은 ResponseBody값인 response를 ErrorResponse에 매칭하여 변환하는 과정이다. 이때 주의해야 할 점은 string()대신 toString()을 사용하면 다음과 같은 에러가 발생한다.
Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
//코루틴을 사용하였다. 카카오 로그인을 예시로 정했다.
private suspend fun loginWithKakao() {
UserApiClient.instance.me { user, error ->
if (error != null) {
Log.e("ERROR", "유저 정보를 받지 못했습니다.")
Log.e("ERROR", "${error.message}.")
Log.e("ERROR", "${error.localizedMessage}.")
} else {
launch {
val response =
service.getKaKaoInfo(
Constants.Kakao.lowercase(),
user?.id.toString(),
user?.kakaoAccount?.profile?.nickname,
user?.kakaoAccount?.profile?.profileImageUrl
)
if (!response.isSuccessful) {
showErrorLog(response.errorBody())
} else {
//응답이 제대로 왔을 경우 실행시킬 구문
}
dismiss()
}
}
}
}
단계는 짧고 쉬워보이지만 처음 하게 된다면 당황할 수 있다. 특히 네트워킹에는 코린이에게는 너무 많은 에러가 도사리고 있으므로 기록해둔다!
누군가에게 도움이 되길