jackson-module-kotlin
では、デシリアライズ時にJSON
上のundefined
とnull
が区別されており、デフォルト引数が利用されるのはundefined
の場合のみです。
null
の場合にもデフォルト引数を利用したい場合、2通りの方法が考えられます。
NullIsSameAsDefaultを有効化する
1つ目は、KotlinFeature.NullIsSameAsDefault
を有効化する方法です。
この方法は、全体へこの機能を適用したい場合に有効です。
import com.fasterxml.jackson.databind.ObjectMapper
import io.github.projectmapk.jackson.module.kogera.KotlinFeature
import io.github.projectmapk.jackson.module.kogera.KotlinModule
val module = KotlinModule.Builder().enable(KotlinFeature.NullIsSameAsDefault).build()
val mapper = ObjectMapper().registerModule(module)
JsonSetter(nulls = Nulls.SKIP)
2つ目は、パラメータにJsonSetter(nulls = Nulls.SKIP)
を付与する方法です。
この方法は、プロパティ毎の特別な挙動を表現したい場合に有効です。
ただし、この機能は執筆時現在リリースされておらず、jackson-module-kotlin 2.16
を待つ必要が有ります。
import com.fasterxml.jackson.annotation.JsonSetter
import com.fasterxml.jackson.annotation.Nulls
data class Data(@JsonSetter(nulls = Nulls.SKIP) val v: Int = -1)