首页 > 解决方案 > 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:请记住,电子邮件对象可能会根据服务器的不同错误而改变。有没有办法优雅地处理这个问题。

亲切的问候

标签: androiderror-handlingretrofit2

解决方案


你可以通过这个得到错误响应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()


推荐阅读