You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There is a discussion in Kotlin about value class with multiple fields(MFVC). Kotlin/KEEP#339
This issue summarizes the MFVC support in jackson-module-kotlin.
Please note that MFVC has not yet been formalized and with the current update policy of jackson-module-kotlin, support may not be implemented for several more years.
The following DTO is used in the following description.
@JvmInline
value classMFVC(valv1:Int, valv2:String, valv3:String?)
data classData(valv:MFVC)
About serialize
As for serialization, it is likely to be supportable.
When serializing MFVC, we believe that it should be the same as a normal class.
In other words, the Data class above would be serialized as follows
{
"v": {
"v1": 1,
"v2": "2",
"v3": "3"
}
}
To achieve this, we need to exclude unboxed getters generated for each MFVC property.
At the moment, the Data class above generates four getters: getV, getV-v1, getV-v2, and getV-v3, which means we have to exclude getV-v1, v2, and v3.
There are two possible ways to do this.
The first is to exclude all but Kotlin Property from the serialization result.
You can distinguish unboxed getters in that they are not Kotlin Property.
However, this would be a destructive change and would likely be implemented as an option.
The second is name-based exclusion.
The separator in the name of an unboxed getter could be changed to a more special name, such as -$. Kotlin/KEEP#340 (comment)
If this change were made, it would make it easier to exclude by name only.
Personally, I prefer the latter method.
The latter method is easier to implement, whereas the former is more complex to implement, and the getter-like function is no longer available.
About deserialize
Supporting deserialization appears to be very difficult.
For the Data class, the constructor that jackson can call is probably of the form Data(int,java.lang.String,java.lang.String).
This is the unboxed form of each property of MFVC.
This means that the number of arguments does not match the number of parameters in Kotlin (= number of properties in JSON).
I haven't done any deep research, but I can't think of any way to support this in Jackson.
If the @JvmExpose annotation is provided by Kotlin, there may be no other way to use it. Kotlin/KEEP#331
The text was updated successfully, but these errors were encountered:
There is a discussion in
Kotlin
aboutvalue class
with multiple fields(MFVC
).Kotlin/KEEP#339
This issue summarizes the
MFVC
support injackson-module-kotlin
.Please note that
MFVC
has not yet been formalized and with the current update policy ofjackson-module-kotlin
, support may not be implemented for several more years.The following
DTO
is used in the following description.About serialize
As for serialization, it is likely to be supportable.
When serializing
MFVC
, we believe that it should be the same as a normal class.In other words, the
Data
class above would be serialized as followsTo achieve this, we need to exclude unboxed getters generated for each
MFVC
property.At the moment, the
Data
class above generates four getters:getV
,getV-v1
,getV-v2
, andgetV-v3
, which means we have to excludegetV-v1
,v2
, andv3
.There are two possible ways to do this.
The first is to exclude all but
Kotlin Property
from the serialization result.You can distinguish unboxed getters in that they are not
Kotlin Property
.However, this would be a destructive change and would likely be implemented as an option.
The second is name-based exclusion.
The separator in the name of an unboxed getter could be changed to a more special name, such as
-$
.Kotlin/KEEP#340 (comment)
If this change were made, it would make it easier to exclude by name only.
Personally, I prefer the latter method.
The latter method is easier to implement, whereas the former is more complex to implement, and the
getter-like
function is no longer available.About deserialize
Supporting deserialization appears to be very difficult.
For the
Data
class, the constructor thatjackson
can call is probably of the formData(int,java.lang.String,java.lang.String)
.This is the unboxed form of each property of
MFVC
.This means that the number of arguments does not match the number of parameters in
Kotlin
(= number of properties inJSON
).I haven't done any deep research, but I can't think of any way to support this in
Jackson
.If the
@JvmExpose
annotation is provided byKotlin
, there may be no other way to use it.Kotlin/KEEP#331
The text was updated successfully, but these errors were encountered: