Страницы

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

воскресенье, 22 декабря 2019 г.

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

#java #android #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
и не приводится ни к одному из двух наследующих его типов.
    


Ответы

Ответ 1



Классы менять не нужно, класс остаётся один и тот же, только в случае успешного ответа в 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; }

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

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