Skip to content

Commit d5d4bd6

Browse files
authored
Merge pull request #200 from ProjectMapK/fix/738
Fixed a problem where the `Nulls` setting was ignored if the input was `undefined`
2 parents a8bb30d + 883d8ee commit d5d4bd6

File tree

4 files changed

+96
-24
lines changed

4 files changed

+96
-24
lines changed

src/main/kotlin/io/github/projectmapk/jackson/module/kogera/deser/valueInstantiator/KotlinValueInstantiator.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,8 @@ internal class KotlinValueInstantiator(
9393
} else {
9494
when {
9595
paramDef.isOptional || paramDef.isVararg -> return@forEachIndexed
96-
// do not try to create any object if it is nullable and the value is missing
97-
paramDef.isNullable -> null
98-
// to get suitable "missing" value provided by deserializer
99-
else -> valueDeserializer?.getAbsentValue(ctxt)
96+
// to get suitable "missing" value provided by nullValueProvider
97+
else -> jsonProp.nullValueProvider?.getAbsentValue(ctxt)
10098
}
10199
}
102100

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser
2+
3+
import com.fasterxml.jackson.annotation.JsonSetter
4+
import com.fasterxml.jackson.annotation.Nulls
5+
import com.fasterxml.jackson.databind.exc.InvalidNullException
6+
import io.github.projectmapk.jackson.module.kogera.jacksonObjectMapper
7+
import io.github.projectmapk.jackson.module.kogera.readValue
8+
import org.junit.jupiter.api.Assertions.assertEquals
9+
import org.junit.jupiter.api.Assertions.assertTrue
10+
import org.junit.jupiter.api.Nested
11+
import org.junit.jupiter.api.Test
12+
import org.junit.jupiter.api.assertThrows
13+
14+
class JsonSetterTest {
15+
val mapper = jacksonObjectMapper()
16+
17+
data class NullsSkip(@JsonSetter(nulls = Nulls.SKIP) val v: Int = -1)
18+
19+
@Test
20+
fun nullsSkip() {
21+
val d = mapper.readValue<NullsSkip>("""{"v":null}""")
22+
23+
assertEquals(-1, d.v)
24+
}
25+
26+
data class NullsFail(@JsonSetter(nulls = Nulls.FAIL) val v: Int?)
27+
28+
@Nested
29+
inner class NullsFailTest {
30+
@Test
31+
fun onNull() {
32+
assertThrows<InvalidNullException> {
33+
mapper.readValue<NullsFail>("""{"v":null}""")
34+
}
35+
}
36+
37+
@Test
38+
fun onMissing() {
39+
assertThrows<InvalidNullException> {
40+
mapper.readValue<NullsFail>("""{}""")
41+
}
42+
}
43+
}
44+
45+
data class NullsAsEmpty(@JsonSetter(nulls = Nulls.AS_EMPTY) val v: Collection<*>)
46+
47+
@Nested
48+
inner class NullsAsEmptyTest {
49+
@Test
50+
fun onNull() {
51+
val d = mapper.readValue<NullsAsEmpty>("""{"v":null}""")
52+
assertTrue(d.v.isEmpty())
53+
}
54+
55+
@Test
56+
fun onMissing() {
57+
val d = mapper.readValue<NullsAsEmpty>("""{}""")
58+
assertTrue(d.v.isEmpty())
59+
}
60+
}
61+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser.deserializer
2+
3+
import com.fasterxml.jackson.core.JsonParser
4+
import com.fasterxml.jackson.databind.DeserializationContext
5+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
6+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
7+
import io.github.projectmapk.jackson.module.kogera.jacksonObjectMapper
8+
import io.github.projectmapk.jackson.module.kogera.readValue
9+
import org.junit.jupiter.api.Assertions.assertEquals
10+
import org.junit.jupiter.api.Test
11+
12+
class MissingAbsentValueTest {
13+
class Deser : StdDeserializer<Int>(Int::class.java) {
14+
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Int {
15+
TODO("Not yet implemented")
16+
}
17+
18+
override fun getAbsentValue(ctxt: DeserializationContext) = -1
19+
}
20+
21+
data class D(
22+
@JsonDeserialize(using = Deser::class) val foo: Int,
23+
@JsonDeserialize(using = Deser::class) val bar: Int?
24+
)
25+
26+
@Test
27+
fun test() {
28+
val mapper = jacksonObjectMapper()
29+
val result = mapper.readValue<D>("{}")
30+
31+
assertEquals(D(-1, -1), result)
32+
}
33+
}

src/test/kotlin/io/github/projectmapk/jackson/module/kogera/zPorted/test/github/Github526.kt

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)