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
)