Moshi 如何将 kotlin 的默认值应用到 json 的 null 字段

dyl*_*won 5 android json moshi

杰森

{
    "id": "1",
    "name": "name",
    "email": null
}
Run Code Online (Sandbox Code Playgroud)

用户

data class User(
    var id: Int = 0,
    var name: String = "",
    var email: String = ""
)
Run Code Online (Sandbox Code Playgroud)

我想在解析 json 时为空值应用默认值。(将上述电子邮件字段应用为非空的“”(空白))

Sta*_*Kou 7

详情: https : //code.luasoftware.com/tutorials/android/android-moshi-adapter-convert-null-to-empty-string/

TL; 博士;

创建 NullToEmptyStringAdapter。

@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class NullToEmptyString

class NullToEmptyStringAdapter {
    @ToJson
    fun toJson(@NullToEmptyString value: String?): String? {
        return value
    }

    @FromJson
    @NullToEmptyString
    fun fromJson(@javax.annotation.Nullable data: String?): String? {
        return data ?: ""
    }
}
Run Code Online (Sandbox Code Playgroud)

将 NullToEmptyStringAdapter 应用于您的数据类。

data class User(
    var id: Int = 0,
    var name: String = "",
    @NullToEmptyString
    var email: String = ""
)
Run Code Online (Sandbox Code Playgroud)

设置 Moshi

val moshi = Moshi.Builder()
    .add(NullToEmptyStringAdapter())
    .add(KotlinJsonAdapterFactory())
    .build()
Run Code Online (Sandbox Code Playgroud)