レスポンスの形式
{
"val":[]
}
{
"val":{
"val1":1,
"val1":2
}
}
こんな風に同じキーでも配列とかオブジェクトになったりするとき。
class Response{
@SerializedName("val")
val val<Val>? = null
}
っていうモデルだとうまくいかない。形式が異なるのでエラーになる。
そこでJsonDeserializerを使う。
以下のようにjsonMappingのタイミングでリマップする。
class ValRequestDeserializer:JsonDeserializer<Response>{
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): Response {
// ここでjsonが配列かオブジェクトか判定して配列にリマップする
return context!!.deserialize(json, Response::class.java)
}
return Gson().fromJson(json, Response::class.java)
}
}
これを以下のようにセットする。
val gson = GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.registerTypeAdapter(Response::class.java, ValRequestDeserializer())
.create()
なんかもっといいやり方ありそうだが、今はこれしか知らない・・・・
まぁそもそもこんな実装必要なAPIやめてくれってのはもはや言うまい。いろいろな事情があるのだ、いろいろな