diff --git a/src/main/java/org/springframework/data/redis/core/DefaultReactiveHashOperations.java b/src/main/java/org/springframework/data/redis/core/DefaultReactiveHashOperations.java index 90f6c5e8b..eab64c7a4 100644 --- a/src/main/java/org/springframework/data/redis/core/DefaultReactiveHashOperations.java +++ b/src/main/java/org/springframework/data/redis/core/DefaultReactiveHashOperations.java @@ -265,7 +265,7 @@ class DefaultReactiveHashOperations implements ReactiveHashOperations @SuppressWarnings("unchecked") private HV readHashValue(ByteBuffer value) { - return (HV) serializationContext.getHashValueSerializationPair().read(value); + return (HV) (value == null ? value : serializationContext.getHashValueSerializationPair().read(value)); } private Map.Entry deserializeHashEntry(Map.Entry source) { @@ -277,7 +277,7 @@ class DefaultReactiveHashOperations implements ReactiveHashOperations List values = new ArrayList<>(source.size()); for (ByteBuffer byteBuffer : source) { - values.add(byteBuffer == null ? null : readHashValue(byteBuffer)); + values.add(readHashValue(byteBuffer)); } return values; } diff --git a/src/test/java/org/springframework/data/redis/core/DefaultReactiveHashOperationsIntegrationTests.java b/src/test/java/org/springframework/data/redis/core/DefaultReactiveHashOperationsIntegrationTests.java index 354b7bd6c..a46926e05 100644 --- a/src/test/java/org/springframework/data/redis/core/DefaultReactiveHashOperationsIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/core/DefaultReactiveHashOperationsIntegrationTests.java @@ -166,6 +166,13 @@ public class DefaultReactiveHashOperationsIntegrationTests { .verifyComplete(); } + @Test // DATAREDIS-824 + public void getAbsentKey() { + + hashOperations.get(keyFactory.instance(), hashKeyFactory.instance()).as(StepVerifier::create) // + .verifyComplete(); + } + @Test // DATAREDIS-602 public void multiGet() { @@ -178,21 +185,28 @@ public class DefaultReactiveHashOperationsIntegrationTests { HK hashkey2 = hashKeyFactory.instance(); HV hashvalue2 = hashValueFactory.instance(); - StepVerifier.create(hashOperations.multiGet(key, Arrays.asList(hashkey1, hashkey2))) // - .consumeNextWith(actual -> { - assertThat(actual).hasSize(2).containsSequence(null, null); - }) // - .verifyComplete(); - putAll(key, hashkey1, hashvalue1, hashkey2, hashvalue2); - StepVerifier.create(hashOperations.multiGet(key, Arrays.asList(hashkey1, hashkey2))) // + hashOperations.multiGet(key, Arrays.asList(hashkey1, hashkey2)).as(StepVerifier::create) // .consumeNextWith(actual -> { assertThat(actual).hasSize(2).containsSequence(hashvalue1, hashvalue2); }) // .verifyComplete(); } + @Test // DATAREDIS-824 + public void multiGetAbsentKeys() { + + assumeTrue(hashKeyFactory instanceof StringObjectFactory && hashValueFactory instanceof StringObjectFactory); + + hashOperations.multiGet(keyFactory.instance(), Arrays.asList(hashKeyFactory.instance(), hashKeyFactory.instance())) + .as(StepVerifier::create) // + .consumeNextWith(actual -> { + assertThat(actual).hasSize(2).containsSequence(null, null); + }) // + .verifyComplete(); + } + @Test // DATAREDIS-602 public void increment() {