You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moshi反序列化0、1到Boolean?时null值抛出异常该如何修复

问题原因

你当前定义的BooleanAdapter仅适配非空Int输入、非空Boolean输出的场景,而实体类中haha字段是可空的Boolean?类型,当JSON传入null值时,Moshi无法找到匹配@BooleanType Boolean?类型的适配器,因此抛出找不到对应适配器的异常。同时你现有代码的toJson方法未添加@BooleanType注解,后续序列化带该注解的字段时也会出现匹配问题。

调整方案

修改BooleanAdapter的输入输出类型为可空类型,同时补全toJson方法的注解:

@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class BooleanType

class BooleanAdapter {
    @FromJson
    @BooleanType
    fun fromJson(value: Int?): Boolean? {
        // 输入为null时直接返回null,非空则判断是否等于1
        return value?.let { it == 1 }
    }

    @ToJson
    @BooleanType
    fun toJson(@BooleanType value: Boolean?): Int? {
        // 输入为null时直接返回null,非空则转为对应Int值
        return value?.let { if (it) 1 else 0 }
    }
}

效果验证

修改后不需要改动实体类和单元测试代码,再次运行测试用例:

  • {"haha":1} 会正常反序列化为haha = true
  • {"haha":null} 会正常反序列化为haha = null
  • 序列化场景也能正常将Boolean?类型转为对应的0、1或者null值

内容的提问来源于stack exchange,提问作者RedSIght

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:06:04