Skip to content

Commit f43e565

Browse files
committed
Create NullInputException and test for null input deser
1 parent 1b3edc3 commit f43e565

File tree

3 files changed

+31
-15
lines changed

3 files changed

+31
-15
lines changed

src/main/kotlin/com/fasterxml/jackson/module/kotlin/Exceptions.kt

+2
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ class MissingKotlinParameterException(val parameter: KParameter,
2020
msg: String
2121
) : this(parameter, processor as JsonParser, msg)
2222
}
23+
24+
class NullInputException(msg: String) : MismatchedInputException(null, msg)

src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt

+4-9
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,9 @@ package com.fasterxml.jackson.module.kotlin
33
import com.fasterxml.jackson.core.JsonParser
44
import com.fasterxml.jackson.core.TreeNode
55
import com.fasterxml.jackson.core.type.TypeReference
6-
import com.fasterxml.jackson.databind.JsonMappingException
7-
import com.fasterxml.jackson.databind.MappingIterator
8-
import com.fasterxml.jackson.databind.ObjectMapper
9-
import com.fasterxml.jackson.databind.ObjectReader
10-
import com.fasterxml.jackson.databind.module.SimpleModule
11-
import com.fasterxml.jackson.databind.JsonDeserializer
12-
import com.fasterxml.jackson.databind.JsonSerializer
6+
import com.fasterxml.jackson.databind.*
137
import com.fasterxml.jackson.databind.json.JsonMapper
8+
import com.fasterxml.jackson.databind.module.SimpleModule
149
import java.io.File
1510
import java.io.InputStream
1611
import java.io.Reader
@@ -68,7 +63,7 @@ inline fun <reified T : Any> SimpleModule.addDeserializer(kClass: KClass<T>, des
6863

6964
inline fun <reified T> T.throwIfNullableTypeIsNull(): T {
7065
if (null !is T && this == null) {
71-
throw Exception()
66+
throw NullInputException(msg = "Cannot deserialize null into non-null object of type ${T::class.java.name}")
7267
}
7368
return this
74-
}
69+
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/ExtensionMethodsTests.kt

+25-6
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@ package com.fasterxml.jackson.module.kotlin.test
22

33
import com.fasterxml.jackson.databind.ObjectMapper
44
import com.fasterxml.jackson.databind.SerializationFeature
5-
import com.fasterxml.jackson.module.kotlin.*
5+
import com.fasterxml.jackson.module.kotlin.NullInputException
6+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
7+
import com.fasterxml.jackson.module.kotlin.readValue
68
import org.hamcrest.CoreMatchers.equalTo
79
import org.hamcrest.MatcherAssert.assertThat
10+
import org.junit.Assert.assertNull
11+
import org.junit.Assert.assertThrows
812
import org.junit.Test
913

1014
class TestExtensionMethods {
1115
val mapper: ObjectMapper = jacksonObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, false)
1216

13-
data class BasicPerson(val name: String, val age: Int)
17+
@Test
18+
fun testAllInferenceForms() {
19+
data class BasicPerson(val name: String, val age: Int)
1420

15-
@Test fun testAllInferenceForms() {
1621
val json = """{"name":"John Smith","age":30}"""
1722

1823
val inferRightSide = mapper.readValue<BasicPerson>(json)
@@ -26,11 +31,25 @@ class TestExtensionMethods {
2631
assertThat(person, equalTo(expectedPerson))
2732
}
2833

29-
data class MyData(val a: String, val b: Int)
34+
/**
35+
* https://stackoverflow.com/questions/33368328/how-to-use-jackson-to-deserialize-to-kotlin-collections
36+
*/
37+
@Test
38+
fun testStackOverflow33368328() {
39+
data class MyData(val a: String, val b: Int)
3040

31-
@Test fun testStackOverflow33368328() {
3241
val jsonStr = """[{"a": "value1", "b": 1}, {"a": "value2", "b": 2}]"""
3342
val myList: List<MyData> = mapper.readValue(jsonStr)
3443
assertThat(myList, equalTo(listOf(MyData("value1", 1), MyData("value2", 2))))
3544
}
36-
}
45+
46+
enum class Options { ONE, TWO }
47+
48+
@Test
49+
fun testNullEnumThrows() {
50+
assertThrows(NullInputException::class.java) {
51+
val foo: Options = mapper.readValue("null")
52+
assertNull(foo)
53+
}
54+
}
55+
}

0 commit comments

Comments
 (0)