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.
This commit is contained in:
@@ -301,6 +301,10 @@ public class RedisKeyValueAdapter extends AbstractKeyValueAdapter
|
||||
Map<byte[], byte[]> raw = redisOps
|
||||
.execute((RedisCallback<Map<byte[], byte[]>>) connection -> connection.hGetAll(binId));
|
||||
|
||||
if (CollectionUtils.isEmpty(raw)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
RedisData data = new RedisData(raw);
|
||||
data.setId(stringId);
|
||||
data.setKeyspace(stringKeyspace);
|
||||
@@ -802,7 +806,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)
|
||||
|
||||
@@ -129,15 +129,17 @@ class RedisQueryEngine extends QueryEngine<RedisKeyValueAdapter, RedisOperationC
|
||||
List<T> result = new ArrayList<>(raw.size());
|
||||
for (Map.Entry<byte[], Map<byte[], byte[]>> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user