From 31abc40a8be8a88bb218efb0d56e18f222d42f6f Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 24 Jan 2011 17:23:26 +0200 Subject: [PATCH] DATAKV-23 + String converter supports nulls --- .../keyvalue/redis/core/RedisTemplate.java | 31 +++++++++---------- .../serializer/GenericToStringSerializer.java | 2 ++ .../serializer/StringRedisSerializer.java | 5 ++- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 1aa1a41c3..d6e67b45f 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -69,8 +69,6 @@ import org.springframework.util.ClassUtils; */ public class RedisTemplate extends RedisAccessor implements RedisOperations { - private static final byte[] EMPTY_ARRAY = new byte[0]; - private boolean exposeConnection = false; private RedisSerializer keySerializer = new JdkSerializationRedisSerializer(); private RedisSerializer valueSerializer = new JdkSerializationRedisSerializer(); @@ -281,16 +279,28 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @SuppressWarnings("unchecked") private byte[] rawKey(Object key) { - return (key != null ? keySerializer.serialize(key) : EMPTY_ARRAY); + Assert.notNull(key, "non null key required"); + return keySerializer.serialize(key); } private byte[] rawString(String key) { - return (key != null ? stringSerializer.serialize(key) : EMPTY_ARRAY); + return stringSerializer.serialize(key); } @SuppressWarnings("unchecked") private byte[] rawValue(Object value) { - return (value != null ? valueSerializer.serialize(value) : EMPTY_ARRAY); + return valueSerializer.serialize(value); + } + + @SuppressWarnings("unchecked") + private byte[] rawHashKey(HK hashKey) { + Assert.notNull(hashKey, "non null hash key required"); + return hashKeySerializer.serialize(hashKey); + } + + @SuppressWarnings("unchecked") + private byte[] rawHashValue(HV value) { + return hashValueSerializer.serialize(value); } private byte[][] rawKeys(Collection keys) { @@ -317,17 +327,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return rawKeys; } - @SuppressWarnings("unchecked") - private byte[] rawHashKey(HK value) { - return (value != null ? hashKeySerializer.serialize(value) : EMPTY_ARRAY); - } - - @SuppressWarnings("unchecked") - private byte[] rawHashValue(HV value) { - return (value != null ? hashValueSerializer.serialize(value) : EMPTY_ARRAY); - } - - @SuppressWarnings("unchecked") private > T deserializeValues(Collection rawValues, Class type) { Collection values = (List.class.isAssignableFrom(type) ? new ArrayList(rawValues.size()) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/GenericToStringSerializer.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/GenericToStringSerializer.java index c43bf5f26..1887e92b1 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/GenericToStringSerializer.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/GenericToStringSerializer.java @@ -32,6 +32,8 @@ import org.springframework.util.Assert; * * Note: The conversion service initialization happens automatically if the class is defined * as a Spring bean. + * + * Note: Does not handle nulls in any special way delegating everything to the container. * * @author Costin Leau */ diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/StringRedisSerializer.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/StringRedisSerializer.java index f78a28648..dbb0f8b3e 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/StringRedisSerializer.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/StringRedisSerializer.java @@ -25,11 +25,14 @@ import org.springframework.util.Assert; *

* Useful when the interaction with the Redis happens mainly through Strings. * + *

Converts null into empty arrays (which get translated into empty strings on deserialization). + * * @author Costin Leau */ public class StringRedisSerializer implements RedisSerializer { private final static byte[] EMPTY_ARRAY = new byte[0]; + private final String EMPTY_STRING = ""; private final Charset charset; public StringRedisSerializer() { @@ -43,7 +46,7 @@ public class StringRedisSerializer implements RedisSerializer { @Override public String deserialize(byte[] bytes) { - return (SerializerUtils.isEmpty(bytes) ? null : new String(bytes, charset)); + return (SerializerUtils.isEmpty(bytes) ? EMPTY_STRING : new String(bytes, charset)); } @Override