Вы можете расширить свои ответы с базой ответов и проверить, есть ли ошибка или это удастся. Вот пример базового ответа боб ниже:
public class BaseResponse {
@SerializedName("ResponseCode")
private int code;
@SerializedName("ResponseMessage")
private String message;
@SerializedName("ResponseText")
private String text;
}
Мой апи возвращает ResponseCode
, ResponseMessage
и ResponseText
в каждом responser и я выражаю свои ответы BaseResponse фасоли и проверить, если есть ошибка.
Вы можете изменить ваши ответы как свои схемы возврата api.
Edit: Вот ваш ответ для Апи:
public class Error {
@SerializedName("ResponseCode")
private int code;
@SerializedName("ResponseMessage")
private String message;
@SerializedName("ResponseText")
private String text;
}
public class YourWrapperResponse {
@SerializedName("Error")
private Error error;
@SerializedName("AuthenticateUserResponse")
private AuthenticateUserResponse authenticateUserResponse;
}
И ваш звонок будет как:
Call<YourWrapperResponse> authenticateUser(String id);
В приведенном выше примере я дал вам пример ошибок бизнес-ручки, которые вы получаете в каждом успешном ответе. Успешные средства Http Status 200. Также вам не нужно возвращать этот Error object
в каждом ответе. Если есть ошибка, вы можете вернуться в свой ответ.
В Retrofit 2.0+ вам необходимо проверить, был ли ваш запрос успешным. Ниже приведен пример ниже:
Call<User> auth = YourApiProvider.getInstance().getServices().auth(userName, passowrd, grantType);
auth.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()) {
// Here you get a 200 from your server.
}
} else {
// Here you get an authentication error.
// You can get error with response.code();
// You can get your error with response.errorBody();
// or you can get raw response with response.raw()
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
// Here you get error such as TimeOut etc.
}
});
Надеюсь, это поможет вам. Удачи!
API, который я использую, возвращает объект Error, когда он терпит неудачу, и не показывает его, когда он преуспевает. Будет ли ваш подход к подклассу работать? Или это вызовет ошибку, говоря, что нет такого объекта, как «Ошибка», когда он преуспеет? – Subby
Когда это удастся, он отобразит ваш объект. И если нет ошибки, он не скажет, что нет такого объекта, как Ошибка. Поэтому я думаю, что если вы поместите свой объект Error в его базовый ответ, у вас не будет никаких проблем. – savepopulation
Кажется, что Retrofit не сериализуется, если запрос терпит неудачу, т. Е. 401. Если запрос завершен, он сериализуется. Я не хватает какой-то конфигурации или чего-то еще? – Subby