@@ -120,39 +120,9 @@ public GenericJackson2JsonRedisSerializer(@Nullable String classPropertyTypeName
120
120
public GenericJackson2JsonRedisSerializer (@ Nullable String classPropertyTypeName , JacksonObjectReader reader ,
121
121
JacksonObjectWriter writer ) {
122
122
123
- this (classPropertyTypeName , reader , writer , null );
124
- }
125
-
126
- /**
127
- * Creates {@link GenericJackson2JsonRedisSerializer} initialized with an {@link ObjectMapper} configured for default
128
- * typing using the given {@link String name} along with the given, required {@link JacksonObjectReader} and
129
- * {@link JacksonObjectWriter} used to read/write {@link Object Objects} de/serialized as JSON,
130
- * optionally customized {@link NullValueSerializer}.
131
- * <p>
132
- * In case {@link String name} is {@literal empty} or {@literal null}, then {@link JsonTypeInfo.Id#CLASS} will be
133
- * used.
134
- * <p>
135
- * In case {@link StdSerializer} is {@literal null}, then a default {@link NullValueSerializer} will be registered.
136
- *
137
- * @param classPropertyTypeName {@link String name} of the JSON property holding type information; can be
138
- * {@literal null}.
139
- * @param reader {@link JacksonObjectReader} function to read objects using {@link ObjectMapper}.
140
- * @param writer {@link JacksonObjectWriter} function to write objects using {@link ObjectMapper}.
141
- * @param nullValueSerializer {@link StdSerializer} to serialize {@link NullValue} instances.
142
- * @see ObjectMapper#activateDefaultTypingAsProperty(PolymorphicTypeValidator, DefaultTyping, String)
143
- * @see ObjectMapper#activateDefaultTyping(PolymorphicTypeValidator, DefaultTyping, As)
144
- * @since 3.3
145
- */
146
- public GenericJackson2JsonRedisSerializer (@ Nullable String classPropertyTypeName , JacksonObjectReader reader ,
147
- JacksonObjectWriter writer , @ Nullable StdSerializer <NullValue > nullValueSerializer ) {
148
-
149
123
this (new ObjectMapper (), reader , writer , classPropertyTypeName );
150
124
151
- if (nullValueSerializer == null ) {
152
- registerNullValueSerializer (this .mapper , classPropertyTypeName );
153
- } else {
154
- registerCustomNullValueSerializer (nullValueSerializer );
155
- }
125
+ registerNullValueSerializer (this .mapper , classPropertyTypeName );
156
126
157
127
StdTypeResolverBuilder typer = TypeResolverBuilder .forEverything (this .mapper ).init (JsonTypeInfo .Id .CLASS , null )
158
128
.inclusion (JsonTypeInfo .As .PROPERTY );
@@ -164,6 +134,17 @@ public GenericJackson2JsonRedisSerializer(@Nullable String classPropertyTypeName
164
134
this .mapper .setDefaultTyping (typer );
165
135
}
166
136
137
+ /**
138
+ * Factory method returning a {@literal Builder} used to construct and configure a {@link GenericJackson2JsonRedisSerializer}.
139
+ *
140
+ * @return new {@link GenericJackson2JsonRedisSerializer.GenericJackson2JsonRedisSerializerBuilder}.
141
+ * @since 3.3
142
+ */
143
+ public static GenericJackson2JsonRedisSerializerBuilder builder (ObjectMapper objectMapper , JacksonObjectReader reader ,
144
+ JacksonObjectWriter writer ) {
145
+ return new GenericJackson2JsonRedisSerializerBuilder (objectMapper , reader , writer );
146
+ }
147
+
167
148
/**
168
149
* Setting a custom-configured {@link ObjectMapper} is one way to take further control of the JSON serialization
169
150
* process. For example, an extended {@link SerializerFactory} can be configured that provides custom serializers for
@@ -261,10 +242,6 @@ public static void registerNullValueSerializer(ObjectMapper objectMapper, @Nulla
261
242
objectMapper .registerModule (new SimpleModule ().addSerializer (new NullValueSerializer (classPropertyTypeName )));
262
243
}
263
244
264
- private void registerCustomNullValueSerializer (StdSerializer <NullValue > nullValueSerializer ) {
265
- this .mapper .registerModule (new SimpleModule ().addSerializer (nullValueSerializer ));
266
- }
267
-
268
245
/**
269
246
* Gets the configured {@link ObjectMapper} used internally by this {@link GenericJackson2JsonRedisSerializer} to
270
247
* de/serialize {@link Object objects} as {@literal JSON}.
@@ -430,6 +407,69 @@ public void serializeWithType(NullValue value, JsonGenerator jsonGenerator, Seri
430
407
}
431
408
}
432
409
410
+ /**
411
+ * {@literal Builder} for creating a {@link GenericJackson2JsonRedisSerializer}.
412
+ *
413
+ * @author Anne Lee
414
+ * @since 3.3
415
+ */
416
+ public static class GenericJackson2JsonRedisSerializerBuilder {
417
+ @ Nullable
418
+ private String classPropertyTypeName ;
419
+ private JacksonObjectReader reader ;
420
+ private JacksonObjectWriter writer ;
421
+ private ObjectMapper mapper ;
422
+ @ Nullable
423
+ private StdSerializer <NullValue > nullValueSerializer ;
424
+
425
+ private GenericJackson2JsonRedisSerializerBuilder (
426
+ ObjectMapper objectMapper ,
427
+ JacksonObjectReader reader ,
428
+ JacksonObjectWriter writer
429
+ ) {
430
+ this .mapper = objectMapper ;
431
+ this .reader = reader ;
432
+ this .writer = writer ;
433
+ }
434
+
435
+ /**
436
+ * Configure a classPropertyName.
437
+ *
438
+ * @param classPropertyTypeName can be {@literal null}.
439
+ * @return this {@link GenericJackson2JsonRedisSerializer.GenericJackson2JsonRedisSerializerBuilder}.
440
+ * @since 3.3
441
+ */
442
+ public GenericJackson2JsonRedisSerializerBuilder classPropertyTypeName (@ Nullable String classPropertyTypeName ) {
443
+ this .classPropertyTypeName = classPropertyTypeName ;
444
+ return this ;
445
+ }
446
+
447
+ /**
448
+ * Register a nullValueSerializer.
449
+ *
450
+ * @param nullValueSerializer the {@link StdSerializer} to use for {@link NullValue} serialization. Can be {@literal null}.
451
+ * @return this {@link GenericJackson2JsonRedisSerializer.GenericJackson2JsonRedisSerializerBuilder}.
452
+ */
453
+ public GenericJackson2JsonRedisSerializerBuilder registerNullValueSerializer (@ Nullable StdSerializer <NullValue > nullValueSerializer ) {
454
+ this .nullValueSerializer = nullValueSerializer ;
455
+ return this ;
456
+ }
457
+
458
+ /**
459
+ * Create new instance of {@link GenericJackson2JsonRedisSerializer} with configuration options applied.
460
+ *
461
+ * @return new instance of {@link GenericJackson2JsonRedisSerializer}.
462
+ */
463
+ public GenericJackson2JsonRedisSerializer build () {
464
+ Assert .notNull (this .mapper , "ObjectMapper must not be null" );
465
+ Assert .notNull (this .reader , "Reader must not be null" );
466
+ Assert .notNull (this .writer , "Writer must not be null" );
467
+
468
+ this .mapper .registerModule (new SimpleModule ().addSerializer (this .nullValueSerializer != null ? this .nullValueSerializer : new NullValueSerializer (this .classPropertyTypeName )));
469
+ return new GenericJackson2JsonRedisSerializer (this .mapper , this .reader , this .writer , this .classPropertyTypeName );
470
+ }
471
+ }
472
+
433
473
/**
434
474
* Custom {@link StdTypeResolverBuilder} that considers typing for non-primitive types. Primitives, their wrappers and
435
475
* primitive arrays do not require type hints. The default {@code DefaultTyping#EVERYTHING} typing does not satisfy
0 commit comments