Обработка ошибок с помощью модернизации - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть вызов 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 голосов
/ 14 февраля 2019

Я бы изменил json на следующий формат при отправке его обратно с сервера.Это позволит довольно легко конвертировать с помощью Gson или другого json конвертера.

Это даст вам объект ErrorResponse , который будет иметь логическое значение успеха вместе с 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:

Класс 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;

  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...