@@ -134,6 +134,38 @@ public GenericJackson2JsonRedisSerializer(@Nullable String classPropertyTypeName
134
134
this .mapper .setDefaultTyping (typer );
135
135
}
136
136
137
+ /**
138
+ * Creates {@link GenericJackson2JsonRedisSerializer} initialized with an {@link ObjectMapper} configured for default
139
+ * typing using the given {@link String name} along with the given, required {@link JacksonObjectReader} and
140
+ * {@link JacksonObjectWriter} used to read/write {@link Object Objects} de/serialized as JSON,
141
+ * optionally customized {@link NullValueSerializer}.
142
+ * <p>
143
+ * In case {@link String name} is {@literal empty} or {@literal null}, then {@link JsonTypeInfo.Id#CLASS} will be
144
+ * used.
145
+ * <p>
146
+ * In case {@link StdSerializer} is {@literal null}, then a default {@link NullValueSerializer} will be registered.
147
+ *
148
+ * @param classPropertyTypeName {@link String name} of the JSON property holding type information; can be
149
+ * {@literal null}.
150
+ * @param reader {@link JacksonObjectReader} function to read objects using {@link ObjectMapper}.
151
+ * @param writer {@link JacksonObjectWriter} function to write objects using {@link ObjectMapper}.
152
+ * @param nullValueSerializer {@link StdSerializer} to serialize {@link NullValue} instances.
153
+ * @see ObjectMapper#activateDefaultTypingAsProperty(PolymorphicTypeValidator, DefaultTyping, String)
154
+ * @see ObjectMapper#activateDefaultTyping(PolymorphicTypeValidator, DefaultTyping, As)
155
+ * @since 3.3
156
+ */
157
+ public GenericJackson2JsonRedisSerializer (@ Nullable String classPropertyTypeName , JacksonObjectReader reader ,
158
+ JacksonObjectWriter writer , @ Nullable StdSerializer <NullValue > nullValueSerializer ) {
159
+
160
+ this (classPropertyTypeName , reader , writer );
161
+
162
+ if (nullValueSerializer == null ) {
163
+ registerNullValueSerializer (this .mapper , classPropertyTypeName );
164
+ } else {
165
+ registerCustomNullValueSerializer (nullValueSerializer );
166
+ }
167
+ }
168
+
137
169
/**
138
170
* Setting a custom-configured {@link ObjectMapper} is one way to take further control of the JSON serialization
139
171
* process. For example, an extended {@link SerializerFactory} can be configured that provides custom serializers for
@@ -231,6 +263,10 @@ public static void registerNullValueSerializer(ObjectMapper objectMapper, @Nulla
231
263
objectMapper .registerModule (new SimpleModule ().addSerializer (new NullValueSerializer (classPropertyTypeName )));
232
264
}
233
265
266
+ private void registerCustomNullValueSerializer (StdSerializer <NullValue > nullValueSerializer ) {
267
+ this .mapper .registerModule (new SimpleModule ().addSerializer (nullValueSerializer ));
268
+ }
269
+
234
270
/**
235
271
* Gets the configured {@link ObjectMapper} used internally by this {@link GenericJackson2JsonRedisSerializer} to
236
272
* de/serialize {@link Object objects} as {@literal JSON}.
0 commit comments