2

I need to parse data class from server request like this:

@JsonClass(generateAdapter = true)
data class User(
    @Json(name = "user_name")
    val userName: String,
    @Json(name = "gender")
    val gender: Gender?,
) {
    enum class Gender {
        @Json(name = "male")
        MALE,

        @Json(name = "female")
        FEMALE,
    }
}

I got this json from server:

{
    "data":{
     "user_name":"MyUserName",
     "gender":null
    }
}

But i have this error com.squreup.moshi.JsonDataException: Expected a string but was NULL at path $.data.gender

Is there a way to fix this without changing server api?

UPD: The problem was in EnumJsonAdapter with unknown fallback:

Moshi.Builder()
   .add(KotlinJsonAdapterFactory())
   .add(
       User.Gender::class.java,
       EnumJsonAdapter.create(User.Gender::class.java)
           .withUnknownFallback(null)
    )
    .build()

1 Answers1

2

Solution: add nullSafe() to adapter

Moshi.Builder()
   .add(KotlinJsonAdapterFactory())
   .add(
       User.Gender::class.java,
       EnumJsonAdapter.create(User.Gender::class.java)
           .withUnknownFallback(null)
           .nullSafe()
    )
    .build()