Moshi с Retrofit отправляю пустой запрос когда ожидается {null,null}
Приложение шлет мои координаты постоянно, логика завязана на чем, когда мы отключается геолокация
на сервер вместо координат должны отправиться нулы ожидается {"latitude":null,"longitude":null}
А отправляется {}
Код такой
Модель
@Serializable
data class PointBody(
@Json(name = "latitude") val latitude: Double?,
@Json(name = "longitude") val longitude: Double?
)
Запрос
@POST(Path.LOCATION)
suspend fun sendPoint(
@Body point: PointBody
)
Retorift
private fun provideRetrofit(moshi: Moshi, client: OkHttpClient) = Retrofit.Builder()
.client(client)
.addConverterFactory(MoshiConverterFactory.create(moshi))
.baseUrl("Base")
.build()
Moshi
private fun provideMoshi(): Moshi {
return Moshi
.Builder()
.add(KotlinJsonAdapterFactory())
.build()
}
Где-то нашел что KotlinJsonAdapterFactory() ответственен за такое поведение как его отключить именно к данной модели?
Ответы (1 шт):
Автор решения: Svetl9chok
→ Ссылка
Решение было написание своего адаптера для Moshi
Адаптер
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class SerializeNulls
class SerializeNullsFactory : JsonAdapter.Factory {
override fun create(type: Type, annotations: Set<Annotation?>, moshi: Moshi): JsonAdapter<*>? {
val nextAnnotations = Types.nextAnnotations(
annotations,
SerializeNulls::class.java
) ?: return null
return moshi.nextAdapter<Any>(this, type, nextAnnotations).serializeNulls()
}
}
Модель
@Serializable
data class PointBody(
@SerializeNulls val latitude: Double?,
@SerializeNulls val longitude: Double?
)
Moshi
private fun provideMoshi(): Moshi {
return Moshi
.Builder()
.add(SerializeNullsFactory())
.add(KotlinJsonAdapterFactory())
.build()
}