Страницы

Поиск по вопросам

среда, 16 января 2019 г.

Обработка динамического JSON в Retrofit2

Имеется метод в сервисе:
@DELETE("api/rest/dir/{dir_path}/") Call delete(@Path("dir_path") String dirPath);
В виде ответа могут придти разные 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;
}

Комментариев нет:

Отправить комментарий