响应返回Int类型数据时抛出NumberFormatException异常排查求助
接口响应NumberFormatException异常排查指南
已提供排查材料
- 错误信息:

- 接口JSON响应:

- 接收数据Data class定义:

常见触发原因
- 字段类型不匹配
若接口返回的目标字段为字符串格式的数字(如"total": "100")、带小数的浮点型数字(如"total": 100.0"),直接用Int类型接收会触发类型转换异常。 - 数值超出Int承载范围
32位Int的取值范围为-2147483648到2147483647,若接口返回的数值超过该范围,会转换失败,需要将Data class中对应字段的类型修改为Long。 - 空值适配异常
若接口对应字段可能返回Null,但Data class中定义的是不可空Int类型,解析框架转换时也会抛出该异常,可将字段修改为可空类型Int?,或配置解析框架的全局默认值规则。
修复方案
如果确认接口返回的数值本身是合法整数,仅格式不匹配,可以通过自定义解析适配器兼容,以Gson为例的适配代码如下:
// 兼容多类型转Int的适配器 class IntTypeAdapter : TypeAdapter<Int>() { override fun write(out: JsonWriter, value: Int?) { out.value(value ?: 0) } override fun read(reader: JsonReader): Int { return when (reader.peek()) { JsonToken.NUMBER -> reader.nextInt() JsonToken.STRING -> reader.nextString().toIntOrNull() ?: 0 JsonToken.NULL -> { reader.nextNull() 0 } else -> { reader.skipValue() 0 } } } }
如果使用Moshi、Jackson等其他解析框架,也可以参考相同逻辑配置对应的类型转换器实现兼容。
内容的提问来源于stack exchange,提问作者Antony
相关产品推荐
相关产品推荐

