File tree Expand file tree Collapse file tree 4 files changed +29
-17
lines changed
main/kotlin/com/fasterxml/jackson/module/kotlin
test/kotlin/com/fasterxml/jackson/module/kotlin/test/github Expand file tree Collapse file tree 4 files changed +29
-17
lines changed Original file line number Diff line number Diff line change @@ -31,6 +31,7 @@ WrongWrong (@k163377)
3131# 2 .18.3 (not yet released)
3232
3333WrongWrong (@k163377 )
34+ * #908 : Additional fixes related to #904.
3435* #904 : Fixed an error when serializing a `value class` that wraps a `Map`
3536* #900 : Fixed an issue where some tests were not running
3637
Original file line number Diff line number Diff line change @@ -36,7 +36,9 @@ Co-maintainers:
3636
37372.18 .3 (not yet released )
3838
39- #904 : An error that occurred when serializing a `value class` that wraps a `Map`(#873) has been fixed.
39+ #904 : Fixed a problem where context was not being propagated properly when serializing an unboxed value of `value class`
40+ or a value retrieved with `JsonValue `.
41+ This fixes a problem where an error would occur when serializing a `value class ` that wraps a `Map `(#873 ).
4042
41432.18 .2 (27 - Nov - 2024 )
42442.18 .1 (28 - Oct - 2024 )
Original file line number Diff line number Diff line change @@ -56,12 +56,6 @@ object ValueClassUnboxSerializer : StdSerializer<Any>(Any::class.java) {
5656
5757 override fun serialize (value : Any , gen : JsonGenerator , provider : SerializerProvider ) {
5858 val unboxed = value::class .java.getMethod(" unbox-impl" ).invoke(value)
59-
60- if (unboxed == null ) {
61- provider.findNullValueSerializer(null ).serialize(null , gen, provider)
62- return
63- }
64-
6559 provider.defaultSerializeValue(unboxed, gen)
6660 }
6761}
@@ -76,9 +70,7 @@ internal sealed class ValueClassSerializer<T : Any>(t: Class<T>) : StdSerializer
7670 val unboxed = unboxMethod.invoke(value)
7771 // As shown in the processing of the factory function, jsonValueGetter is always a static method.
7872 val jsonValue: Any? = staticJsonValueGetter.invoke(null , unboxed)
79- jsonValue
80- ?.let { provider.findValueSerializer(it::class .java).serialize(it, gen, provider) }
81- ? : provider.findNullValueSerializer(null ).serialize(null , gen, provider)
73+ provider.defaultSerializeValue(jsonValue, gen)
8274 }
8375 }
8476
Original file line number Diff line number Diff line change 11package com.fasterxml.jackson.module.kotlin.test.github
22
3+ import com.fasterxml.jackson.annotation.JsonValue
34import com.fasterxml.jackson.module.kotlin.defaultMapper
45import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
56import com.fasterxml.jackson.module.kotlin.readValue
67import kotlin.test.Test
78
89class GitHub873 {
10+ @JvmInline
11+ value class Person (
12+ val properties : Map <String , Any >,
13+ )
14+
15+ data class TimestampedPerson (
16+ val timestamp : Long ,
17+ val person : Person ,
18+ )
19+
920 @Test
1021 fun `should serialize value class` () {
1122
@@ -35,12 +46,18 @@ class GitHub873 {
3546 }
3647
3748 @JvmInline
38- value class Person (
39- val properties : Map <String , Any >,
40- )
49+ value class MapAsJsonValue (val value : String ) {
50+ @get:JsonValue
51+ val jsonValue get() = mapOf (" key" to value)
52+ }
4153
42- data class TimestampedPerson (
43- val timestamp : Long ,
44- val person : Person ,
45- )
54+ data class JsonValueWrapper (val value : MapAsJsonValue )
55+
56+ @Test
57+ fun `JsonValue is serialized in the same way` () {
58+ val data = JsonValueWrapper (MapAsJsonValue (" value" ))
59+ val json = defaultMapper.writeValueAsString(data)
60+
61+ assert (""" {"value":{"key":"value"}}""" == json)
62+ }
4663}
You can’t perform that action at this time.
0 commit comments