Я делаю 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 напрямую возвращает карту, и, таким образом, Моши должен знать, что ему нужно сопоставить ее со свойством модели. предоставлять. Но я понятия не имею, как это решить.