From 406e030d928a38e8694092100d173f02c2052e1d Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 28 Jul 2020 14:42:51 +0200 Subject: [PATCH] =?UTF-8?q?DATAREDIS-1191=20-=20Guard=20calls=20to=20Redis?= =?UTF-8?q?Converter.read(=E2=80=A6)=20to=20avoid=20empty=20objects.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now check if the RedisBucket is empty to avoid empty objects being materialized from EntityReader. --- .../data/redis/core/RedisKeyValueAdapter.java | 6 +++++- .../springframework/data/redis/core/RedisQueryEngine.java | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/core/RedisKeyValueAdapter.java b/src/main/java/org/springframework/data/redis/core/RedisKeyValueAdapter.java index ff3c9000c..bb5f50d2d 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisKeyValueAdapter.java +++ b/src/main/java/org/springframework/data/redis/core/RedisKeyValueAdapter.java @@ -298,6 +298,10 @@ public class RedisKeyValueAdapter extends AbstractKeyValueAdapter Map raw = redisOps .execute((RedisCallback>) connection -> connection.hGetAll(binId)); + if (CollectionUtils.isEmpty(raw)) { + return null; + } + RedisData data = new RedisData(raw); data.setId(stringId); data.setKeyspace(stringKeyspace); @@ -786,7 +790,7 @@ public class RedisKeyValueAdapter extends AbstractKeyValueAdapter return hash1; }); - Object value = converter.read(Object.class, new RedisData(hash)); + Object value = CollectionUtils.isEmpty(hash) ? null : converter.read(Object.class, new RedisData(hash)); String channel = !ObjectUtils.isEmpty(message.getChannel()) ? converter.getConversionService().convert(message.getChannel(), String.class) : null; diff --git a/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java b/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java index d1a985510..02da45ab1 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java +++ b/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java @@ -129,15 +129,17 @@ class RedisQueryEngine extends QueryEngine result = new ArrayList<>(raw.size()); for (Map.Entry> entry : raw.entrySet()) { + if (CollectionUtils.isEmpty(entry.getValue())) { + continue; + } + RedisData data = new RedisData(entry.getValue()); data.setId(getAdapter().getConverter().getConversionService().convert(entry.getKey(), String.class)); data.setKeyspace(keyspace); T converted = this.getAdapter().getConverter().read(type, data); - if (converted != null) { - result.add(converted); - } + result.add(converted); } return result; }