@@ -45,8 +45,7 @@ public final class JsonFormat implements EventFormat {
45
45
public static final String CONTENT_TYPE = "application/cloudevents+json" ;
46
46
47
47
private final ObjectMapper mapper ;
48
- private final boolean forceDataBase64Serialization ;
49
- private final boolean forceStringSerialization ;
48
+ private final JsonFormatOptions options ;
50
49
51
50
/**
52
51
* Create a new instance of this class customizing the serialization configuration.
@@ -57,31 +56,86 @@ public final class JsonFormat implements EventFormat {
57
56
* @see #withForceNonJsonDataToString()
58
57
*/
59
58
public JsonFormat (boolean forceDataBase64Serialization , boolean forceStringSerialization ) {
59
+ this (
60
+ JsonFormatOptions .builder ()
61
+ .forceDataBase64Serialization (forceDataBase64Serialization )
62
+ .forceStringSerialization (forceStringSerialization )
63
+ .build ()
64
+ );
65
+ }
66
+
67
+ /**
68
+ * Create a new instance of this class customizing the serialization configuration.
69
+ *
70
+ * @param options json serialization / deserialization options
71
+ */
72
+ public JsonFormat (JsonFormatOptions options ) {
60
73
this .mapper = new ObjectMapper ();
61
- this .mapper .registerModule (getCloudEventJacksonModule (forceDataBase64Serialization , forceStringSerialization ));
62
- this .forceDataBase64Serialization = forceDataBase64Serialization ;
63
- this .forceStringSerialization = forceStringSerialization ;
74
+ this .mapper .registerModule (getCloudEventJacksonModule (options ));
75
+ this .options = options ;
64
76
}
65
77
66
78
/**
67
79
* Create a new instance of this class with default serialization configuration
68
80
*/
69
81
public JsonFormat () {
70
- this (false , false );
82
+ this (new JsonFormatOptions () );
71
83
}
72
84
73
85
/**
74
86
* @return a copy of this JsonFormat that serialize events with json data with Base64 encoding
75
87
*/
76
88
public JsonFormat withForceJsonDataToBase64 () {
77
- return new JsonFormat (true , this .forceStringSerialization );
89
+ return new JsonFormat (
90
+ JsonFormatOptions .builder ()
91
+ .forceDataBase64Serialization (true )
92
+ .forceStringSerialization (this .options .isForceStringSerialization ())
93
+ .forceExtensionNameLowerCaseDeserialization (this .options .isForceExtensionNameLowerCaseDeserialization ())
94
+ .forceIgnoreInvalidExtensionNameDeserialization (this .options .isForceIgnoreInvalidExtensionNameDeserialization ())
95
+ .build ()
96
+ );
78
97
}
79
98
80
99
/**
81
100
* @return a copy of this JsonFormat that serialize events with non-json data as string
82
101
*/
83
102
public JsonFormat withForceNonJsonDataToString () {
84
- return new JsonFormat (this .forceDataBase64Serialization , true );
103
+ return new JsonFormat (
104
+ JsonFormatOptions .builder ()
105
+ .forceDataBase64Serialization (this .options .isForceDataBase64Serialization ())
106
+ .forceStringSerialization (true )
107
+ .forceExtensionNameLowerCaseDeserialization (this .options .isForceExtensionNameLowerCaseDeserialization ())
108
+ .forceIgnoreInvalidExtensionNameDeserialization (this .options .isForceIgnoreInvalidExtensionNameDeserialization ())
109
+ .build ()
110
+ );
111
+ }
112
+
113
+ /**
114
+ * @return a copy of this JsonFormat that deserialize events with converting extension name lower case.
115
+ */
116
+ public JsonFormat withForceExtensionNameLowerCaseDeserialization () {
117
+ return new JsonFormat (
118
+ JsonFormatOptions .builder ()
119
+ .forceDataBase64Serialization (this .options .isForceDataBase64Serialization ())
120
+ .forceStringSerialization (this .options .isForceStringSerialization ())
121
+ .forceExtensionNameLowerCaseDeserialization (true )
122
+ .forceIgnoreInvalidExtensionNameDeserialization (this .options .isForceIgnoreInvalidExtensionNameDeserialization ())
123
+ .build ()
124
+ );
125
+ }
126
+
127
+ /**
128
+ * @return a copy of this JsonFormat that deserialize events with ignoring invalid extension name
129
+ */
130
+ public JsonFormat withForceIgnoreInvalidExtensionNameDeserialization () {
131
+ return new JsonFormat (
132
+ JsonFormatOptions .builder ()
133
+ .forceDataBase64Serialization (this .options .isForceDataBase64Serialization ())
134
+ .forceStringSerialization (this .options .isForceStringSerialization ())
135
+ .forceExtensionNameLowerCaseDeserialization (this .options .isForceExtensionNameLowerCaseDeserialization ())
136
+ .forceIgnoreInvalidExtensionNameDeserialization (true )
137
+ .build ()
138
+ );
85
139
}
86
140
87
141
@ Override
@@ -137,9 +191,24 @@ public static SimpleModule getCloudEventJacksonModule() {
137
191
* @see #withForceNonJsonDataToString()
138
192
*/
139
193
public static SimpleModule getCloudEventJacksonModule (boolean forceDataBase64Serialization , boolean forceStringSerialization ) {
194
+ return getCloudEventJacksonModule (
195
+ JsonFormatOptions .builder ()
196
+ .forceDataBase64Serialization (forceDataBase64Serialization )
197
+ .forceStringSerialization (forceStringSerialization )
198
+ .build ()
199
+ );
200
+ }
201
+
202
+ /**
203
+ * @param options json serialization / deserialization options
204
+ * @return a JacksonModule with CloudEvent serializer/deserializer customizing the data serialization.
205
+ */
206
+ public static SimpleModule getCloudEventJacksonModule (JsonFormatOptions options ) {
140
207
final SimpleModule ceModule = new SimpleModule ("CloudEvent" );
141
- ceModule .addSerializer (CloudEvent .class , new CloudEventSerializer (forceDataBase64Serialization , forceStringSerialization ));
142
- ceModule .addDeserializer (CloudEvent .class , new CloudEventDeserializer ());
208
+ ceModule .addSerializer (CloudEvent .class , new CloudEventSerializer (
209
+ options .isForceDataBase64Serialization (), options .isForceStringSerialization ()));
210
+ ceModule .addDeserializer (CloudEvent .class , new CloudEventDeserializer (
211
+ options .isForceExtensionNameLowerCaseDeserialization (), options .isForceIgnoreInvalidExtensionNameDeserialization ()));
143
212
return ceModule ;
144
213
}
145
214
0 commit comments