我正在对返回以下内容的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需要知道它需要将其映射到我的模型属性提供。但是我不知道如何解决这个问题。