Skip to content

Commit a456798

Browse files
committed
DATAREDIS-1191 - Guard calls to RedisConverter.read(…) to avoid empty objects.
We now check if the RedisBucket is empty to avoid empty objects being materialized from EntityReader.
1 parent 6dbb999 commit a456798

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/main/java/org/springframework/data/redis/core/RedisKeyValueAdapter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,10 @@ public <T> T get(Object id, String keyspace, Class<T> type) {
293293
Map<byte[], byte[]> raw = redisOps
294294
.execute((RedisCallback<Map<byte[], byte[]>>) connection -> connection.hGetAll(binId));
295295

296+
if (CollectionUtils.isEmpty(raw)) {
297+
return null;
298+
}
299+
296300
RedisData data = new RedisData(raw);
297301
data.setId(stringId);
298302
data.setKeyspace(stringKeyspace);
@@ -775,7 +779,7 @@ public void onMessage(Message message, @Nullable byte[] pattern) {
775779
return hash1;
776780
});
777781

778-
Object value = converter.read(Object.class, new RedisData(hash));
782+
Object value = CollectionUtils.isEmpty(hash) ? null : converter.read(Object.class, new RedisData(hash));
779783

780784
String channel = !ObjectUtils.isEmpty(message.getChannel())
781785
? converter.getConversionService().convert(message.getChannel(), String.class) : null;

src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,17 @@ public <T> Collection<T> execute(RedisOperationChain criteria, Comparator<?> sor
129129
List<T> result = new ArrayList<>(raw.size());
130130
for (Map.Entry<byte[], Map<byte[], byte[]>> entry : raw.entrySet()) {
131131

132+
if (CollectionUtils.isEmpty(entry.getValue())) {
133+
continue;
134+
}
135+
132136
RedisData data = new RedisData(entry.getValue());
133137
data.setId(getAdapter().getConverter().getConversionService().convert(entry.getKey(), String.class));
134138
data.setKeyspace(keyspace);
135139

136140
T converted = this.getAdapter().getConverter().read(type, data);
137141

138-
if (converted != null) {
139-
result.add(converted);
140-
}
142+
result.add(converted);
141143
}
142144
return result;
143145
}

0 commit comments

Comments
 (0)