android json LogInterceptor打印日志 kotlin代码
目前无法打印上传流里的参数
@Multipart 类型

其他会打印 json 格式,方便给参数给后台调试

代码如下 ::
import android.text.TextUtils
import com.google.gson.GsonBuilder
import me.goldze.mvvmhabit.utils.KLog
import okhttp3.Interceptor
import okhttp3.Response
import okio.Buffer
import java.lang.Exception
import java.net.URLDecoder
import java.nio.charset.Charset
import java.nio.charset.UnsupportedCharsetException
import java.util.concurrent.TimeUnit
/**
* Description: <\br>
*/
class LogInterceptor : Interceptor {
// 不对 HTML $ = 进行转义
val gson = GsonBuilder().disableHtmlEscaping().create()
private val UTF8 = Charset.forName("UTF-8")
// 为了打印JSON
val headerMap = HashMap<String, String>()
val bodyMap = HashMap<String, String>()
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val requestBody = request.body()
var body: String? = null
requestBody?.let {
val buffer = Buffer()
requestBody.writeTo(buffer)
var charset: Charset? = UTF8
val contentType = requestBody.contentType()
contentType?.let {
charset = contentType.charset(UTF8)
}
body = buffer.readString(charset!!)
}
headerMap.clear()
bodyMap.clear()
//---------------
if (!TextUtils.isEmpty(body)) {
// val arrayStr = URLDecoder.decode(body, "UTF-8")?.split("&")
val arrayStr = body?.split("&")
// val arrayStr = body?.split("&")
arrayStr?.forEach {
val nameValue = it.split("=")
try {
//如果是文件流 这里会抛异常
bodyMap.put(nameValue[0], URLDecoder.decode(nameValue[1], "UTF-8"))
} catch (e: Exception) {
// 如果是文件流 可能没有KEY
if (nameValue.size>1){
bodyMap.put(nameValue[0], nameValue[1])
}else{
bodyMap.put("noKey", nameValue[0])
}
}
}
}
//------------------
request.headers().let {
val names = it.names()
for (name in names) {
headerMap.put(name, it.get(name) ?: "")
}
}
KLog.i(
"发送请求: method:" + request.method()
+ "\nurl:" + request.url()
+ "\n请求头:" + gson.toJson(headerMap)
// + "\n请求参数: " + gson.toJson(body)
+ "\n请求参数: " + gson.toJson(bodyMap)
)
val startNs = System.nanoTime()
val response = chain.proceed(request)
val tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs)
val responseBody = response.body()
val rBody: String
val source = responseBody!!.source()
source.request(java.lang.Long.MAX_VALUE)
val buffer = source.buffer()
var charset: Charset? = UTF8
val contentType = responseBody.contentType()
contentType?.let {
try {
charset = contentType.charset(UTF8)
} catch (e: UnsupportedCharsetException) {
KLog.e(e.message)
}
}
rBody = buffer.clone().readString(charset!!)
KLog.d(
"收到响应: code:" + response.code()
+ "\n请求url:" + response.request().url()
+ "\n请求body:" + gson.toJson(body)
+ "\nResponse: " + rBody
)
return response
}
}
浙公网安备 33010602011771号