반응형
api 통신에 대한 에러 발생 시, 해당 통신에 대한 Reqeust Body를 추출하여
사용자가 어떠한 값을 보냈는지 파악할 필요가 있다.
@Body 또는 @Field 형식으로 보내는 경우에 대해 OkHttpClient에서 값을 추출하는 로직을 구성해 봤다.
private fun extractBodyStringFromRequest(request: Request): String {
return if (request.body is FormBody) { //Field type
val field = mutableMapOf<String, String>()
val formBody = request.body as FormBody
for (i in 0 until formBody.size) {
field[formBody.name(i)] = formBody.value(i)
}
field.toString()
} else { //Body type
val buffer = okio.Buffer()
request.body?.writeTo(buffer)
buffer.readUtf8()
}
}
먼저 Field Type으로 보낼 시에는 FormBody 형식이 사용된다.
FormBody의 각 필드를 읽어와 삽입된 데이터를 Map에 저장.
일반 Body Type으로 보낼 시에는 요청 Body를 추출하여 Buffer에 기록한다.
이제 직접적으로 확인 가능하도록 readUtf8() 활용하여 문자열로 변환하면 Request 데이터들에 대한 확인이 가능하다.
반응형