@@ -23,11 +23,6 @@ class Github464 {
23
23
}
24
24
}
25
25
26
- @Suppress(" UNCHECKED_CAST" )
27
- private val writer: ObjectWriter = jacksonObjectMapper()
28
- .apply { serializerProvider.setNullKeySerializer(NullValueClassKeySerializer as JsonSerializer <Any ?>) }
29
- .writerWithDefaultPrettyPrinter()
30
-
31
26
@JvmInline
32
27
value class ValueClass (val value : Int? )
33
28
data class WrapperClass (val inlineField : ValueClass )
@@ -44,22 +39,27 @@ class Github464 {
44
39
val garply : Map <ValueClass , ValueClass ?>
45
40
)
46
41
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
+
47
57
@Test
48
58
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()
63
63
64
64
assertEquals(
65
65
"""
@@ -83,6 +83,44 @@ class Github464 {
83
83
writer.writeValueAsString(target)
84
84
)
85
85
}
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
+ }
86
124
}
87
125
88
126
class SerializerPriorityTest {
0 commit comments