not-null requirement ignored for primitives in data classes · Issue #242 · FasterXML/jackson-module-kotlin (original) (raw)
When deserializing a data class with primitive types, the default value for that java primitive type is used instead of throwing an IllegalArgumentException or MissingKotlinParameterException.
Steps to reproduce
- Create new project using maven archetype - org.jetbrains.kotlin:kotlin-archetype-jvm
- Add dependency on jackson-module-kotlin - 2.9.7
- Run the following test class
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import org.junit.Test import java.lang.IllegalArgumentException import kotlin.test.assertNull
data class NullIntValue(val value: Int?) data class NullDoubleValue(val value: Double?) data class NullLongValue(val value: Long?) data class NullBooleanValue(val value: Boolean?)
data class IntValue(val value: Int) data class DoubleValue(val value: Double) data class LongValue(val value: Long) data class BooleanValue(val value: Boolean)
class DeserializationTest { private val objectMapper = jacksonObjectMapper()
@Test
fun `test value is null - Boolean`(){
val value : NullBooleanValue = objectMapper.readValue("{}")
assertNull(value.value)
}
@Test
fun `test value is null - Double`(){
val value : NullDoubleValue = objectMapper.readValue("{}")
assertNull(value.value)
}
@Test
fun `test value is null - Int`(){
val value : NullIntValue = objectMapper.readValue("{}")
assertNull(value.value)
}
@Test
fun `test value is null - Long`(){
val value : NullLongValue = objectMapper.readValue("{}")
assertNull(value.value)
}
@Test(expected = IllegalArgumentException::class)
fun `test value throws - Boolean`(){
val value : BooleanValue = objectMapper.readValue("{}")
assertNull(value.value)
}
@Test(expected = IllegalArgumentException::class)
fun `test value throws - Double`(){
val value : DoubleValue = objectMapper.readValue("{}")
assertNull(value.value)
}
@Test(expected = IllegalArgumentException::class)
fun `test value throws - Int`(){
val value : IntValue = objectMapper.readValue("{}")
assertNull(value.value)
}
@Test(expected = IllegalArgumentException::class)
fun `test value throws - Long`(){
val value : LongValue = objectMapper.readValue("{}")
assertNull(value.value)
}
}