micronaut-projects / micronaut-serialization

Build Time Serialization APIs for Micronaut
Apache License 2.0
26 stars 19 forks source link

Ability to serialize / deserialize boolean properties as numeric values in json #911

Open cutz opened 1 month ago

cutz commented 1 month ago

Feature description

I have a boolean property that I would like to serialize/deserialize to json as a numeric value 0 or 1. I believe this typically could be done by annotating the property with @JsonFormat(shape=JsonFormat.Shape.Number). As documented micronaut doesn't not support the shape property for JsonFormat and attempts to use it result in the following error:

Annotation @JsonFormat specifies attribute 'shape'. Currently supported attributes include: [timezone, pattern, locale, lenient]

Are there any plans to support this?

graemerocher commented 1 month ago

probably doable yeah

cutz commented 1 month ago

I don't have a feel for how big of an undertaking this would be. If this seems like something that would be a good starter task, and someone is willing to point me in the right direction, I'd be willing to take a stab at a solution.

graemerocher commented 1 month ago
  1. step 1 is disable the compile time check in JsonFormatMapper by modifying getSupportedMemberNames
  2. Then I guess BooleanSerde would need to be modified to override createSpecific for serialization / deserialization with a specific customised serialised to handle the shape
dstepanov commented 1 month ago

The other solution would be detecting it in the compilation time and and setting a custom serializer/deserializer interface ShapeDeserializer / interface ShapeSerializer + add implementation which would use createSpecific and some logic to do the convertion

graemerocher commented 1 month ago

that would likely be more efficient yes