Alvin Dizon
09/24/2024, 6:17 AM@Serializable
abstract class BaseResponseV2<out T>(val success: Success<T>? = null)
@Serializable data class Success<out T>(val data: T? = null)
I usually register subclasses like this:
polymorphic(BaseResponseV2::class) {
subclass(SomeResponse::class)
}
But I forgot to do so for the class below, but didn't encounter any crashes. Based on my understanding of https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#registered-subclasses and previous experiences, I should have gotten errors, but I'm puzzled as to why I didn't receive any for this particular case.
@Serializable class GetItemResponse : BaseResponseV2<GetItemResponseData>()
@Serializable
data class GetItemResponseData(val itemName: String? = null)
glureau
09/24/2024, 7:43 AMAlvin Dizon
09/24/2024, 9:48 AMprivate val serializerModule = SerializersModule {
polymorphic(BaseResponseV2::class) {
// subclasses go here
}
}
private val jsonConfig = Json {
ignoreUnknownKeys = true
serializersModule = serializerModule
}
val serializationFactory =
JsonConfig.asConverterFactory("application/json".toMediaType())
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(serializationFactory)
.build()
.create(ItemService::class.java)
glureau
09/24/2024, 9:55 AMAlvin Dizon
09/25/2024, 12:04 AMinterface ItemService {
@GET("ItemService/getItem/v1") suspend fun getItem(): GetItemResponse
}
glureau
09/25/2024, 12:06 PMAlvin Dizon
10/01/2024, 11:39 PMGetItemResponse
does not need to be registered like this:
polymorphic(BaseResponseV2::class) {
subclass(GetItemResponse::class)
}
Even if it is a subclass of BaseResponseV2?