android - Retrofit 2 处理动态错误
问题描述
我正在使用改造 2 向休息服务器发送请求。我在解析来自服务器的错误响应时遇到问题。作为一个例子,我展示了 register api 调用。
我使用服务器数据库中不存在的电子邮件点击此端点,我收到以下回复:
{
"id": "90c51a63-9a5d-46ee-9da6-7227f7042373",
"email": "tkosaev@abv.bg",
"username": "TOdor",
"phoneNumber": null,
"phoneNumberIsVerified": false,
"isIdenfyVerified": false
}
我能够将上面的 json 解析为 Java 对象。如果我想捕获错误,例如如果我使用相同的电子邮件,后端会返回 400 状态并显示该电子邮件已存在的消息,因为已经有用户注册了同一电子邮件。您可以在下面找到 json 的外观,我的问题是如何解析这个响应。
{
"Message": "One or more validation failures have occurred.",
"Failures": {
"Email": [
"Email already exists."
]
}
}
PS:请记住,电子邮件对象可能会根据服务器的不同错误而改变。有没有办法优雅地处理这个问题。
亲切的问候
解决方案
你可以通过这个得到错误响应onResposne()
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Log.e("Error ", "response : " + jObjError);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
您可以通过以下方式检查 api 状态代码
response.code()
推荐阅读
- apache-kafka - 如何使用应用实例 B 删除存储在应用实例 A 的状态存储中的键/值
- angular - 如何将 angular-calendar (mattlewis92) 包含为 Angular 组件而不是包
- uwp - 桌面桥应用程序权限“此应用程序可以访问您的所有文件、外围设备、应用程序、程序和注册表”
- html - 添加固定显示的长文本时如何更改div大小
- java - 添加 SSL 后 Kafka 引导代理断开连接(使用 debezium)
- unity3d - Pro Grids 未在包管理器统一中显示
- android - 我们可以在发送到服务器之前在android中压缩视频和音频文件吗
- java - 与 Excel 驱动程序的 Java ODBC 连接
- stdout - 如何在 Raku 中截获 Proc::Async 的无缓冲输出?
- python - Sympy 可以通过收集多个项来简化有理表达式吗?