Как обернуть ответ на модернизацию в JAVA? - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно использовать бэкэнд, который возвращает мне это:

{
    "ok": true,
    "data": [
        {
            "id": 0,
            "name": "Intempestivo"
        },
        {
            "id": 1,
            "name": "Vacaciones"
        }
}

Но в других случаях он возвращает мне что-то вроде этого:

{
    "ok": true,
    "data": [
        {
            "id": 10,
            "startDate": "2020-05-29T12:00:00.000Z",
            "endDate": "2020-05-30T12:00:00.000Z",
            "status": "En revision",
            "type": "Vacaciones"
        },
        {
            "id": 11,
            "startDate": "2020-05-29T12:00:00.000Z",
            "endDate": "2020-05-30T12:00:00.000Z",
            "status": "En revision",
            "type": "Vacaciones"
        }
    ]
}

Как я могу обернуть эти ответы в Общий класс ответа, в котором единственным изменением может быть объект POJO данных.

public class GeneralResponse<T> {

    @SerializedName("data")
    private WrapperData<T> wrapperData;

    @SerializedName("ok")
    private boolean ok;

    @SerializedName("error")
    private Error error;
}

И данные оболочки:

public class WrapperData<T> {

    private T dataResponse;

    public WrapperData(T POJOResponse) {
        this.dataResponse = POJOResponse;
    }

    public T getDataResponse() {
        return dataResponse;
    }
}

Интерфейс модернизации имеет такой метод:

@GET("permission_types/")
    Call<GeneralResponse<ArrayList<PermissionType>>> getPermissionTypesWrapped();

Но когда я делаю запрос, я получил следующее исключение:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 'n' column 'n' path $.data

1 Ответ

0 голосов
/ 28 мая 2020

Я просто решаю это.

Я заменяю private WrapperData <T> wrapperData; на private <T> wrapperDate;, поэтому, когда я хочу получить список, я звоню Call<GeneralResponse<Collection<PermissionTypes>>>

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