没有适用于Moshi的JsonAdapter

时间:2020-04-09 19:45:14

标签: android moshi

我想将我的可为空的字符串和布尔值从REST映射到不可为空

我的适配器:

object NullToEmptyStringAdapter: JsonAdapter<String>() {
    @FromJson
    @NullToEmptyString
    override fun fromJson(reader: JsonReader): String {
        if (reader.peek() != JsonReader.Token.NULL) {
            return reader.nextString()
        }
        reader.nextNull<Unit>()
        return ""
    }

    @ToJson
    override fun toJson(writer: JsonWriter, @NullToEmptyString value: String?) {
        writer?.value(value)
    }
}

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



object NullToFalseAdapter: JsonAdapter<Boolean>() {
    @FromJson
    @NullToFalse
    override fun fromJson(reader: JsonReader): Boolean {
        if (reader.peek() != JsonReader.Token.NULL) {
            return reader.nextBoolean()
        }
        reader.nextNull<Unit>()
        return false
    }

    @ToJson
    override fun toJson(writer: JsonWriter, @NullToFalse value: Boolean?) {
        writer?.value(value)
    }
}

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

我像

那样附加它们
return Moshi.Builder()
    .add(NullToFalseAdapter)
    .add(NullToEmptyStringAdapter)

NullToEmptyStringAdapter的工作与预期的一样,但是对于NullToFalseAdapter,我得到Caused by: java.lang.IllegalArgumentException: No JsonAdapter for boolean annotated [@xx.xx.xx.network.adapters.NullToFalse()]

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

看看这个页面。

https://github.com/square/moshi/issues/560

<块引用>

您需要将限定符注解移动到@ToJson 函数的参数中。 README 中有一个示例,它在限定符部分使用了 @HexColor。