3
3
import java .io .IOException ;
4
4
import java .util .UUID ;
5
5
6
+ import com .fasterxml .jackson .annotation .JsonFormat ;
6
7
import com .fasterxml .jackson .core .JsonGenerator ;
7
8
import com .fasterxml .jackson .databind .*;
8
9
import com .fasterxml .jackson .databind .jsonFormatVisitors .JsonFormatVisitorWrapper ;
9
10
import com .fasterxml .jackson .databind .jsonFormatVisitors .JsonValueFormat ;
11
+ import com .fasterxml .jackson .databind .ser .ContextualSerializer ;
10
12
import com .fasterxml .jackson .databind .util .TokenBuffer ;
11
13
12
14
/**
19
21
@ SuppressWarnings ("serial" )
20
22
public class UUIDSerializer
21
23
extends StdScalarSerializer <UUID >
24
+ implements ContextualSerializer // since 2.11.3 (for databind#2815)
22
25
{
23
26
final static char [] HEX_CHARS = "0123456789abcdef" .toCharArray ();
24
27
@@ -35,6 +38,26 @@ public boolean isEmpty(SerializerProvider prov, UUID value)
35
38
return false ;
36
39
}
37
40
41
+ @ Override
42
+ public JsonSerializer <?> createContextual (SerializerProvider serializers ,
43
+ BeanProperty property ) throws JsonMappingException
44
+ {
45
+ JsonFormat .Value format = findFormatOverrides (serializers ,
46
+ property , handledType ());
47
+ Boolean asBinary = null ;
48
+ if (format != null ) {
49
+ JsonFormat .Shape shape = format .getShape ();
50
+ if (shape == JsonFormat .Shape .BINARY ) {
51
+ asBinary = true ;
52
+ } else if (shape == JsonFormat .Shape .STRING ) {
53
+ asBinary = false ;
54
+ }
55
+ // otherwise leave as `null` meaning about same as NATURAL
56
+ }
57
+ // !!! TODO:
58
+ return this ;
59
+ }
60
+
38
61
@ Override
39
62
public void serialize (UUID value , JsonGenerator gen , SerializerProvider provider )
40
63
throws IOException
@@ -50,7 +73,7 @@ public void serialize(UUID value, JsonGenerator gen, SerializerProvider provider
50
73
return ;
51
74
}
52
75
}
53
-
76
+
54
77
// UUID.toString() works ok functionally, but we can make it go much faster
55
78
// (by 4x with micro-benchmark)
56
79
@@ -93,7 +116,6 @@ private static void _appendShort(int bits, char[] ch, int offset)
93
116
ch [++offset ] = HEX_CHARS [(bits >> 8 ) & 0xF ];
94
117
ch [++offset ] = HEX_CHARS [(bits >> 4 ) & 0xF ];
95
118
ch [++offset ] = HEX_CHARS [bits & 0xF ];
96
-
97
119
}
98
120
99
121
private final static byte [] _asBytes (UUID uuid )
0 commit comments