Как обращаться с картойи пользовательский ответ на ошибку от API - PullRequest
1 голос
/ 26 июня 2019

Я делаю GET для API, который возвращает следующее: В случае успеха: Map<String, Light> При ошибке: CustomErrorResponse

Я понятия не имею, как проанализировать оба этих результата для одной и той же модели. Я использую Моши в Котлине, чтобы разобрать входящий JSON для модели.

Я пытался создать модель LightResponse, в которой в качестве свойства указываются типы ответов как успешных, так и ошибочных. Но поскольку ответом является Карта, Моши не знает, что должен сопоставить этот ответ со свойством модели, которую я предоставляю. Я также пытался расширить интерфейс Map в моей модели, но это показалось мне хакерским.

Пример успешного ответа:

{
"1": {
        "state": {
            "isOn": false,
            "bri": 1
        }
    },
"2": {
        "state": {
            "isOn": true,
            "bri": 100
        }
    }
}

Пример ответа на ошибку:

{  
   "error":{  
      "type":1,
      "description":"not allowed"
   }
}

Моя модель пока:

data class LightResponse(
        val lights: Map<String, Light>,
        @field:Json(name = "error") val error: ResponseError? = null
)

Ошибка отображается правильно. Но когда я получаю карту из API, она не отображается на свойство lights моей модели. Я знаю, что это потому, что ответ json напрямую возвращает карту, и, таким образом, Моши должен знать, что ему нужно сопоставить ее со свойством модели. предоставлять. Но я понятия не имею, как это решить.

...