首页 > 解决方案 > 使用改造处理错误

问题描述

我使用改造调用 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;
}

}

然后错误响应

标签: androidretrofit2

解决方案


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

这将为您提供一个ErrorResponse对象,该对象将具有一个成功布尔值以及一个List ,该 List将包含您在消息数组中返回的任何内容。如果您愿意,也可以将其称为错误。您只需在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 类:

错误响应类

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;

  ...
}

推荐阅读