4040import java .util .concurrent .atomic .AtomicReference ;
4141import java .util .function .Consumer ;
4242
43+ import com .fasterxml .jackson .core .JsonGenerator ;
44+ import com .fasterxml .jackson .databind .SerializerProvider ;
45+ import com .fasterxml .jackson .databind .jsontype .TypeSerializer ;
46+ import com .fasterxml .jackson .databind .ser .std .StdSerializer ;
4347import org .junit .jupiter .api .Test ;
4448import org .mockito .Mockito ;
4549
@@ -420,7 +424,7 @@ void deserializesJavaTimeFrimBytes() {
420424 }
421425
422426 @ Test // GH-2601
423- public void internalObjectMapperCustomization () {
427+ void internalObjectMapperCustomization () {
424428
425429 GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer ();
426430
@@ -432,20 +436,63 @@ public void internalObjectMapperCustomization() {
432436
433437 assertThat (serializer .configure (configurer )).isSameAs (serializer );
434438
435- verify (mockObjectMapper , times (1 )).registerModule (eq ( mockModule ) );
439+ verify (mockObjectMapper , times (1 )).registerModule (mockModule );
436440 verifyNoMoreInteractions (mockObjectMapper );
437441 verifyNoInteractions (mockModule );
438442 }
439443
440444 @ Test // GH-2601
441- public void configureWithNullConsumerThrowsIllegalArgumentException () {
445+ void configureWithNullConsumerThrowsIllegalArgumentException () {
442446
443447 assertThatIllegalArgumentException ()
444448 .isThrownBy (() -> new GenericJackson2JsonRedisSerializer ().configure (null ))
445449 .withMessage ("Consumer used to configure and customize ObjectMapper must not be null" )
446450 .withNoCause ();
447451 }
448452
453+ @ Test
454+ void defaultSerializeAndDeserializeNullValueWithBuilderClass () {
455+ GenericJackson2JsonRedisSerializer serializer = GenericJackson2JsonRedisSerializer .builder (
456+ new ObjectMapper ().enableDefaultTyping (DefaultTyping .EVERYTHING , As .PROPERTY ),
457+ JacksonObjectReader .create (), JacksonObjectWriter .create ())
458+ .classPropertyTypeName (null )
459+ .registerNullValueSerializer (null )
460+ .build ();
461+
462+ serializeAndDeserializeNullValue (serializer );
463+ }
464+
465+ @ Test
466+ void customSerializeAndDeserializeNullValueWithBuilderClass () {
467+ GenericJackson2JsonRedisSerializer serializer = GenericJackson2JsonRedisSerializer .builder (
468+ new ObjectMapper (), JacksonObjectReader .create (), JacksonObjectWriter .create ())
469+ .classPropertyTypeName (null )
470+ .registerNullValueSerializer (new StdSerializer <>(NullValue .class ) {
471+ @ Override
472+ public void serialize (NullValue nullValue ,
473+ JsonGenerator jsonGenerator ,
474+ SerializerProvider serializerProvider ) throws IOException {
475+ jsonGenerator .writeNull ();
476+ }
477+
478+ @ Override
479+ public void serializeWithType (NullValue value , JsonGenerator jsonGenerator , SerializerProvider serializers ,
480+ TypeSerializer typeSerializer ) throws IOException {
481+
482+ serialize (value , jsonGenerator , serializers );
483+ }
484+ })
485+ .build ();
486+
487+ NullValue nv = BeanUtils .instantiateClass (NullValue .class );
488+
489+ byte [] serializedValue = serializer .serialize (nv );
490+ assertThat (serializedValue ).isNotNull ();
491+
492+ Object deserializedValue = serializer .deserialize (serializedValue );
493+ assertThat (deserializedValue ).isNull ();
494+ }
495+
449496 private static void serializeAndDeserializeNullValue (GenericJackson2JsonRedisSerializer serializer ) {
450497
451498 NullValue nv = BeanUtils .instantiateClass (NullValue .class );
0 commit comments