Closed lukas-krecan closed 3 years ago
Does
@JsonFormat(shape = JsonFormat.Shape.STRING)
public UUID getUUID() { }
work?
Or conversely use of "config overrides" for all instances of java.util.UUID
, with something like
mapper.configOverride(UUID.class)
.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.STRING))
@cowtowncoder Setting shape does not help
@lukas-krecan Ok. Thank you for verifying. Yes, looking at UUIDSerializer
, it currently only considers whether backend can write binary natively (which formerly Avro backend claimed it couldn't), and bases decision on that.
I'll create a ticket for jackson-databind
to make UUIDSerializer
respect JsonFormat.Shape overrides, to allow resolving this problem.
Created https://github.com/FasterXML/jackson-databind/issues/2815 for tracing fix for this issue.
In hindsight I should have made sure shape overrides were working when finishing 2.11.
So; fixed in 2.11.3 for jackson-databind
. To force serialization as String with Avro, use either per-property annotation:
@JsonFormat(shape = JsonFormat.Shape.STRING)
UUID id;
or configure mapper with config override:
ObjectMapper m = new AvroMapper();
m.configOverride(UUID.class)
.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.STRING));
Thanks a lot
Due to this change in Jackson Avro it's not possible to serialize UUID to String.
fails with