如何处理来自API

时间:2019-06-26 11:26:10

标签: kotlin retrofit moshi

我正在对返回以下内容的API进行GET: 成功时:Map<String, Light> 发生错误:CustomErrorResponse

我不知道如何将这两个结果解析为同一模型。我在Kotlin中使用Moshi将传入的json解析为模型。

我尝试创建一个LightResponse模型,该模型同时具有成功和错误响应类型作为属性。但是由于响应是Map,因此Moshi不知道必须将响应映射到我提供的模型的属性。我也曾尝试在模型中扩展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获取Map时,它并没有映射到我模型的lights属性,我知道这是因为json响应直接返回一个map,因此Moshi需要知道它需要将其映射到我的模型属性提供。但是我不知道如何解决这个问题。

0 个答案:

没有答案