Kotlin 网络请求返回同一字段不同类型数据

本文记录了在Kotlin中遇到的一个问题:后端接口在成功和失败时返回了不同类型的响应数据,导致在处理时遇到困难。由于Kotlin泛型需要指定类型,直接使用通配符*并尝试as转换出现了错误。解决方案是通过自定义Gson转换器来处理这种特殊情况。

今天遇到一个问题需要记录一下

后端开发给了个接口,结果在成功和失败的情况下竟然返回的数据类型不一样

失败的情况:

{
    "code": 202,
    "desc": "格式有误",
    "result": "核验失败",
    "success": false
}

成功的情况:

{
    "code": 200,
    "desc": "成功",
    "result": {
        "mzt": "绿码"
    },
    "success": true
}

尴尬的事来了 在kotlin中泛型在使用的时候一定要声明类型,第一反应就是 那就用*啊 然后再用as呗 哦豁 报错了 java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to

算了心里过程不说了 记录一下解决方案

                    if (it.code == AppConstant.RESPONSE_CODE_SUCCESS) {
                        val result = it.result as LinkedTreeMap<*, *>
                        if (result.containsKey("mzt")) {
                            val value = result["mzt"]
                        }
                    } else {
                        if (it.result is String) {
                         val value = it.result
                        }
                    }

这里顺便记录一下通过自定义Gson转换器参考

贴一下代码好了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘟嘟嘟~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值