使用改造来处理错误

时间:2019-02-14 01:48:10

标签: android retrofit2

我通过改型调用了API以注册用户,当用户输入一个已经存在或格式错误的电话号码或电子邮件时,我想处理401错误。

                    Gson gson = new Gson();
                    Type type = new TypeToken<ErrorResponse>() {}.getType();
                    ErrorResponse errorResponse = gson.fromJson(response.errorBody().charStream(),type);
                   Log.d("err", errorResponse.getMessage().getPhone().get(0))

以上是我的代码,仅显示单个实体(例如电话)。如何从json响应中获取电话和电子邮件的错误消息

{
"status": false,
"message": {
    "email": [
        "The email has already been taken."
    ],
    "phone_no": [
        "The phone no has already been taken."
    ]
}

}

这是Json响应

public class ErrorResponse {
@SerializedName("success")
@Expose
private Boolean success;
@SerializedName("message")
@Expose
private Message message;



public Boolean getSuccess() {
    return success;
}

public void setSuccess(Boolean success) {
    this.success = success;
}

public Message getMessage() {
    return message;
}

public void setMessage(Message message) {
    this.message = message;
}

}

然后错误响应

1 个答案:

答案 0 :(得分:0)

当您从服务器发回json时,我会将json更改为以下格式。这将允许使用Gson或其他json转换器进行非常简单的转换。

这将为您提供一个 ErrorResponse 对象,该对象将具有成功的布尔值以及一个 List ,该列表将包含您在messages数组中返回的内容。如果需要,也可以将其称为“ 错误”。您只需在 ErrorResponse 类中更新注释。

{
  "success": false,
  "messages": [{
    "type": "email",
    "message": "The email has already been taken."
  }, {
    "type": "phone_no",
    "message": "The phone no has already been taken."
  }]
}

然后,我将创建以下Java类:

ErrorResponse类

public class ErrorResponse {

  @SerializedName("status")
  @Expose
  private boolean status;

  @SerializedName("message")
  @Expose
  private List<Message> messages;

  ...
}

消息类

public final class Message {

  @SerializedName("type")
  @Expose
  private String type;

  @SerializedName("message")
  @Expose
  private String messages;

  ...
}