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
相关产品推荐
相关产品推荐

