@@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.SerializerProvider
9
9
import com.fasterxml.jackson.databind.ser.Serializers
10
10
import com.fasterxml.jackson.databind.ser.std.StdSerializer
11
11
import java.math.BigInteger
12
+ import kotlin.reflect.KClass
12
13
13
14
object SequenceSerializer : StdSerializer<Sequence<*>>(Sequence : :class.java) {
14
15
override fun serialize (value : Sequence <* >, gen : JsonGenerator , provider : SerializerProvider ) {
@@ -71,3 +72,20 @@ internal class KotlinSerializers : Serializers.Base() {
71
72
else -> null
72
73
}
73
74
}
75
+
76
+ // This serializer is used to properly serialize the value class.
77
+ // The getter generated for the value class is special,
78
+ // so this class will not work properly when added to the Serializers
79
+ // (it is configured from KotlinAnnotationIntrospector.findSerializer).
80
+ internal class ValueClassBoxSerializer (
81
+ outerClazz : KClass <Any >, innerClazz : Class <* >
82
+ ) : StdSerializer<Any>(outerClazz.java) {
83
+ private val boxMethod = _handledType .getMethod(" box-impl" , innerClazz)
84
+
85
+ override fun serialize (value : Any , gen : JsonGenerator , provider : SerializerProvider ) {
86
+ // Values retrieved from getter are considered validated and constructor-impl is not executed.
87
+ val boxed = boxMethod.invoke(null , value)
88
+
89
+ provider.findValueSerializer(_handledType ).serialize(boxed, gen, provider)
90
+ }
91
+ }
0 commit comments