Имеется метод в сервисе:
@DELETE("api/rest/dir/{dir_path}/")
Call
В виде ответа могут придти разные JSON.
{
"dir": { "status": "success" }
}
или
{
"dir": {
"error_code": "{error number}",
"error_message": "{description or error}"
}
}
Соответственно имеются классы:
public class BaseResponse {
}
public class Error extends BaseResponse {
@SerializedName("error_code")
private int errorCode;
@SerializedName("error_message")
private String errorMessage;
public class Status extends BaseResponse {
@SerializedName("status")
private String status;
Как правильно обрабатывать ответы? А то всегда в response находится BaseResponse и не приводится ни к одному из двух наследующих его типов.
Ответ
Классы менять не нужно, класс остаётся один и тот же, только в случае успешного ответа в status возвращается success, а ваши error будут null, и наоборот в случае ответа с ошибкой - status == null, а в error будут данные:
public class AwesomeResponse extends ErrorResponse {
@Nullable
@SerializedName("status")
public String status;
// сколько угодно полей
}
public class ErrorResponse {
@Nullable
@SerializedName("error_code")
public Integer errorCode;
@Nullable
@SerializedName("error_message")
public String errorMessage;
}
Комментариев нет:
Отправить комментарий