No JsonAdapter for Moshi

Viewed 1239

I would like to map my nullable String and Boolean from REST to Non-Nullable

My Adapters:

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

I'm attaching them like

return Moshi.Builder()
    .add(NullToFalseAdapter)
    .add(NullToEmptyStringAdapter)

NullToEmptyStringAdapter works like expected, but for NullToFalseAdapter I'm getting Caused by: java.lang.IllegalArgumentException: No JsonAdapter for boolean annotated [@xx.xx.xx.network.adapters.NullToFalse()]

Any idea?

1 Answers

Look at this page.

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

You need to move the qualifier annotation to the parameter of the @ToJson function. There's an example in the README which uses @HexColor in the qualifier section.

Related