Platform class kotlin.Unit requires explicit JsonAdapter to be registered

Viewed 96

In a retrofit interface I have defined a method return type as ApiModel < Unit >. but when I call the method I get the error below.

Platform class kotlin.Unit requires explicit JsonAdapter to be registered

so I tried to create my own JsonAdapter as below.

class UnitJsonAdapter {

    @ToJson
    fun toJson(writer: JsonWriter) {
        writer.nullValue()
    }

    @FromJson
    fun fromJson(reader: JsonReader): Unit {
        reader.close()
        return Unit
    }

}

but I face this error.

java.lang.IllegalArgumentException: Unexpected signature for public final void packagename.UnitJsonAdapter.fromJson(com.squareup.moshi.JsonReader).
    @FromJson method signatures may have one of the following structures:
        <any access modifier> R fromJson(JsonReader jsonReader) throws <any>;
        <any access modifier> R fromJson(JsonReader jsonReader, JsonAdapter<any> delegate, <any more delegates>) throws <any>;
        <any access modifier> R fromJson(T value) throws <any>;

I also tried what this link describes, but it seems to have no effect.

Retrofit.Builder()
            .addConverterFactory(UnitConverterFactory)
            .addConverterFactory(MoshiConverterFactory.create(moshi).asLenient())
            .build()
    

object UnitConverterFactory : Converter.Factory() {
    override fun responseBodyConverter(
         type: Type,
         annotations: Array<out Annotation>,
         retrofit: Retrofit
    ): Converter<ResponseBody, *>? {
         return if (type == Unit::class.java) UnitConverter else null
    }

    private object UnitConverter : Converter<ResponseBody, Unit> {
         override fun convert(value: ResponseBody) {
              value.close()
         } 
    }
}

Also this is my ApiModel class:

@JsonClass(generateAdapter = true)
data class ApiModel<T>(
    val result: T,
    val error: Error
)
0 Answers
Related