Android Moshi Adapter Convert Null To Empty String With JsonQualifier (Kotlin)
May 14, 2018The 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)
@JsonQualifier
annotation class NullToEmptyString
class 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:
- android
- android-ktx
- android-studio
- bootstrap
- coroutines
- crashlytics
- css
- dagger2
- datastore
- eslint
- firebase
- flask
- fontawesome
- git
- glide
- google-app-engine
- google-drive
- google-maps
- google-places
- google-play
- hugo
- java
- java-time
- javascript
- kotlin
- lets-encrypt
- linux
- markdown
- moshi
- nginx
- npm
- pip
- python
- room
- rxjava
- selenium
- ssl
- static-site-generator
- ubuntu
- unit-test
- uwsgi
- vue-cli
- vuejs
- web-development
- web-hosting
- webpack
- windows
- workmanager