无法在改造的错误正文中获得错误响应



我无法在改造的错误正文中获得 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
)

相关内容

  • 没有找到相关文章

最新更新