我无法在改造的错误正文中获得 400 响应。我已经设置了日志记录级别,它显示在日志中,但没有显示在错误正文中,我已经搜索了很多,但没有找到任何解决方案,在这种情况下有人可以帮助我摆脱这个问题
call_.enqueue(object : Callback<ResponseBody> {
override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
if (response?.code() == 400) {
var jObjError: JSONObject? = null
try {
var jObjErrorr = response.errorBody().string()
CustomLogs.displayLogs("$TAG jObjErrorr: $jObjErrorr")
} catch (e: Exception) {
}
try {
val string = jObjError?.getstring("error_description")
CustomLogs.displayLogs("$TAG jObjError: $string")
} catch (e: Exception) {
e.printStackTrace();
}
}
}
我需要错误正文来获取和显示消息,我的日志显示了这一点
{"error":"Authorize","error_description":"Error in authentication"}
但错误正文未显示此对象
正如IntelliJ Aiya在评论您的原始帖子时提到的,您应该onFailure
方法执行此操作。据我所知,在响应代码不在 200 范围内(200、201、202 等)的情况下,不会调用 Retrofit 的onResponse
,因此您对if (response?.code() == 400)
的检查永远不会返回 true。
如果您通过 Retrofit onResponse Library...,则明确提到 Retrofit 不会创建状态代码低于 200 或高于 300 的响应正文。您必须具体指定您的错误响应!!
决定将其添加为单独的答案:
if (response?.code() == 400) {
var jObjError: JSONObject? = null
try {
jObjError = response.errorBody().string()
CustomLogs.displayLogs("$TAG jObjError: $jObjError")
} catch (e: Exception) {
}
try {
val string = jObjError?.optString("error_description")
CustomLogs.displayLogs("$TAG jObjError: $string")
} catch (e: Exception) {
e.printStackTrace();
}
}
你能试试这个片段吗?
你可以在 Kotlin 中做到这一点:
val errorResponse: ErrorMessage? = Gson().fromJson(
response.errorBody()!!.charStream(),
object : TypeToken<ErrorMessage>() {}.type
)