The following adapter convert reading of json string such as {"name":null} to name = "".
Create a NullToEmptyString adapter class. I am using a @JsonQualifier as I don't want to apply this adapter to all String.
@Retention(AnnotationRetention.RUNTIME)@JsonQualifierannotation class NullToEmptyStringclass NullToEmptyStringAdapter { @ToJson fun toJson(@NullToEmptyString value: String?): String? { return value } @FromJson @NullToEmptyString fun fromJson(@Nullable data: String?): String? { return data ?: "" }}Apply NullToEmptyStringAdapter.
data class PhotoPin ( @Json(name = "name") @NullToEmptyString var name: String = "" )Setup Moshi
val moshi = Moshi.Builder() .add(NullToEmptyStringAdapter()) .add(KotlinJsonAdapterFactory()) .build()NOTE: KotlinJsonAdapterFactory is required (for Kotlin) else the behaviour differ.
Test Code
@RunWith(AndroidJUnit4::class)class MoshiTest { lateinit var moshi: Moshi lateinit var adapter: JsonAdapter<PhotoPin> @Before fun init() { moshi = Moshi.Builder() .add(NullToEmptyStringAdapter()) .add(KotlinJsonAdapterFactory()) .build() adapter = moshi.adapter<PhotoPin>(PhotoPin::class.java) } @Test fun testNameNull() { var item = adapter.fromJson("""{"name":null}""")!! assertThat(item.name, Is("")) }}References: