Skip to content

Commit 876f559

Browse files
committed
Fixed an issue where NullValueSerializer was not being applied.
1 parent 01d7d13 commit 876f559

File tree

2 files changed

+58
-20
lines changed

2 files changed

+58
-20
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ object ValueClassUnboxSerializer : StdSerializer<Any>(Any::class.java) {
4545
val unboxed = value::class.java.getMethod("unbox-impl").invoke(value)
4646

4747
if (unboxed == null) {
48-
gen.writeNull()
48+
provider.findNullValueSerializer(null).serialize(unboxed, gen, provider)
4949
return
5050
}
5151

src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/github/Github464.kt

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ class Github464 {
2323
}
2424
}
2525

26-
@Suppress("UNCHECKED_CAST")
27-
private val writer: ObjectWriter = jacksonObjectMapper()
28-
.apply { serializerProvider.setNullKeySerializer(NullValueClassKeySerializer as JsonSerializer<Any?>) }
29-
.writerWithDefaultPrettyPrinter()
30-
3126
@JvmInline
3227
value class ValueClass(val value: Int?)
3328
data class WrapperClass(val inlineField: ValueClass)
@@ -44,22 +39,27 @@ class Github464 {
4439
val garply: Map<ValueClass, ValueClass?>
4540
)
4641

42+
private val zeroValue = ValueClass(0)
43+
private val oneValue = ValueClass(1)
44+
private val nullValue = ValueClass(null)
45+
46+
private val target = Poko(
47+
foo = zeroValue,
48+
bar = null,
49+
baz = zeroValue,
50+
qux = listOf(zeroValue, null),
51+
quux = arrayOf(zeroValue, null),
52+
corge = WrapperClass(zeroValue),
53+
grault = null,
54+
garply = mapOf(zeroValue to zeroValue, oneValue to null, nullValue to nullValue)
55+
)
56+
4757
@Test
4858
fun test() {
49-
val zeroValue = ValueClass(0)
50-
val oneValue = ValueClass(1)
51-
val nullValue = ValueClass(null)
52-
53-
val target = Poko(
54-
foo = zeroValue,
55-
bar = null,
56-
baz = zeroValue,
57-
qux = listOf(zeroValue, null),
58-
quux = arrayOf(zeroValue, null),
59-
corge = WrapperClass(zeroValue),
60-
grault = null,
61-
garply = mapOf(zeroValue to zeroValue, oneValue to null, nullValue to nullValue)
62-
)
59+
@Suppress("UNCHECKED_CAST")
60+
val writer: ObjectWriter = jacksonObjectMapper()
61+
.apply { serializerProvider.setNullKeySerializer(NullValueClassKeySerializer as JsonSerializer<Any?>) }
62+
.writerWithDefaultPrettyPrinter()
6363

6464
assertEquals(
6565
"""
@@ -83,6 +83,44 @@ class Github464 {
8383
writer.writeValueAsString(target)
8484
)
8585
}
86+
87+
object NullValueSerializer : StdSerializer<Any>(Any::class.java) {
88+
override fun serialize(value: Any?, gen: JsonGenerator, provider: SerializerProvider) {
89+
gen.writeString("null-value")
90+
}
91+
}
92+
93+
@Test
94+
fun nullValueSerializerTest() {
95+
@Suppress("UNCHECKED_CAST")
96+
val writer = jacksonObjectMapper()
97+
.apply {
98+
serializerProvider.setNullKeySerializer(NullValueClassKeySerializer as JsonSerializer<Any?>)
99+
serializerProvider.setNullValueSerializer(NullValueSerializer)
100+
}.writerWithDefaultPrettyPrinter()
101+
102+
assertEquals(
103+
"""
104+
{
105+
"foo" : 0,
106+
"bar" : "null-value",
107+
"baz" : 0,
108+
"qux" : [ 0, "null-value" ],
109+
"quux" : [ 0, "null-value" ],
110+
"corge" : {
111+
"inlineField" : 0
112+
},
113+
"grault" : "null-value",
114+
"garply" : {
115+
"0" : 0,
116+
"1" : "null-value",
117+
"null-key" : "null-value"
118+
}
119+
}
120+
""".trimIndent(),
121+
writer.writeValueAsString(target)
122+
)
123+
}
86124
}
87125

88126
class SerializerPriorityTest {

0 commit comments

Comments
 (0)