首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Moshi与重装发送空请求

Moshi与重装发送空请求
EN

Stack Overflow用户
提问于 2021-10-28 07:20:31
回答 2查看 400关注 0票数 1

我的应用每次都会发送我的位置。当我禁用地理定位的时候。我要发送{“纬度”:null,“经度”:null},但发送{}

模型

代码语言:javascript
复制
@Serializable
data class PointBody(
    @Json(name = "latitude") val latitude: Double?,
    @Json(name = "longitude") val longitude: Double?
)

请求

代码语言:javascript
复制
 @POST(Path.LOCATION)
    suspend fun sendPoint(
        @Body point: PointBody
    )

Retorift

代码语言:javascript
复制
private fun provideRetrofit(moshi: Moshi, client: OkHttpClient) = Retrofit.Builder()
    .client(client)
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .baseUrl("Base")
    .build()

莫施

代码语言:javascript
复制
private fun provideMoshi(): Moshi {
    return Moshi
        .Builder()
        .add(KotlinJsonAdapterFactory())
        .build()
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-09 07:33:14

只需将withNullSerialization()函数添加到MoshiConverterFactory就可以解决问题。

代码语言:javascript
复制
    @Singleton
    @Provides
    fun provideMoshi(): Moshi =
        Moshi.Builder()
            .add(KotlinJsonAdapterFactory())
            .build()
    
    @Singleton
    @Provides
    fun provideMoshiConverterFactory(moshi: Moshi): MoshiConverterFactory =
        MoshiConverterFactory.create(moshi).withNullSerialization()

MoshiConverterFactory.java代码

代码语言:javascript
复制
...
  /** Return a new factory which includes null values into the serialized JSON. */
  public MoshiConverterFactory withNullSerialization() {
    return new MoshiConverterFactory(moshi, lenient, failOnUnknown, true);
  }
...

有关更多信息,请查看MoshiConverterFactory.java

票数 1
EN

Stack Overflow用户

发布于 2021-10-29 07:33:57

我的解决方案

工厂

代码语言:javascript
复制
@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()
    }
}

模型

代码语言:javascript
复制
@Serializable
data class PointBody(
    @SerializeNulls val latitude: Double?,
    @SerializeNulls val longitude: Double?
)

莫施

代码语言:javascript
复制
private fun provideMoshi(): Moshi {
    return Moshi
        .Builder()
        .add(SerializeNullsFactory())
        .add(KotlinJsonAdapterFactory())
        .build()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69749774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档