diff --git a/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java b/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java index ff10b5692..39514da6f 100644 --- a/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java +++ b/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java @@ -95,7 +95,7 @@ public class RedisCacheConfiguration { registerDefaultConverters(conversionService); return new RedisCacheConfiguration(Duration.ZERO, true, true, null, - SerializationPair.fromSerializer(new StringRedisSerializer()), + SerializationPair.fromSerializer(StringRedisSerializer.UTF_8), SerializationPair.fromSerializer(new JdkSerializationRedisSerializer()), conversionService); } diff --git a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java index 6ca890265..66bfc612d 100644 --- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java @@ -117,7 +117,7 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco * @param connection Redis connection */ public DefaultStringRedisConnection(RedisConnection connection) { - this(connection, new StringRedisSerializer()); + this(connection, StringRedisSerializer.UTF_8); } /** diff --git a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java index 9bc04b176..cf1ba0a01 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java +++ b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java @@ -96,7 +96,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @SuppressWarnings("rawtypes") private @Nullable RedisSerializer valueSerializer = null; @SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashKeySerializer = null; @SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashValueSerializer = null; - private RedisSerializer stringSerializer = new StringRedisSerializer(); + private RedisSerializer stringSerializer = StringRedisSerializer.UTF_8; private @Nullable ScriptExecutor scriptExecutor; diff --git a/src/main/java/org/springframework/data/redis/core/StringRedisTemplate.java b/src/main/java/org/springframework/data/redis/core/StringRedisTemplate.java index 36e08f373..b7df3131c 100644 --- a/src/main/java/org/springframework/data/redis/core/StringRedisTemplate.java +++ b/src/main/java/org/springframework/data/redis/core/StringRedisTemplate.java @@ -31,6 +31,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; * {@link StringRedisConnection}. * * @author Costin Leau + * @author Mark Paluch */ public class StringRedisTemplate extends RedisTemplate { @@ -39,11 +40,10 @@ public class StringRedisTemplate extends RedisTemplate { * and {@link #afterPropertiesSet()} still need to be called. */ public StringRedisTemplate() { - RedisSerializer stringSerializer = new StringRedisSerializer(); - setKeySerializer(stringSerializer); - setValueSerializer(stringSerializer); - setHashKeySerializer(stringSerializer); - setHashValueSerializer(stringSerializer); + setKeySerializer(StringRedisSerializer.UTF_8); + setValueSerializer(StringRedisSerializer.UTF_8); + setHashKeySerializer(StringRedisSerializer.UTF_8); + setHashValueSerializer(StringRedisSerializer.UTF_8); } /** diff --git a/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java b/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java index 10d9990fb..edd6c4d0f 100644 --- a/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java +++ b/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java @@ -127,7 +127,7 @@ public class RedisMessageListenerContainer implements InitializingBean, Disposab private final SubscriptionTask subscriptionTask = new SubscriptionTask(); - private volatile RedisSerializer serializer = new StringRedisSerializer(); + private volatile RedisSerializer serializer = StringRedisSerializer.UTF_8; private long recoveryInterval = DEFAULT_RECOVERY_INTERVAL; diff --git a/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java b/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java index e9e22e943..80a6d54ac 100644 --- a/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java +++ b/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java @@ -92,6 +92,7 @@ import org.springframework.util.StringUtils; * @author Greg Turnquist * @author Thomas Darimont * @author Christoph Strobl + * @author Mark Paluch * @see org.springframework.jms.listener.adapter.MessageListenerAdapter */ public class MessageListenerAdapter implements InitializingBean, MessageListener { @@ -317,9 +318,8 @@ public class MessageListenerAdapter implements InitializingBean, MessageListener * @see JdkSerializationRedisSerializer */ protected void initDefaultStrategies() { - RedisSerializer serializer = new StringRedisSerializer(); - setSerializer(serializer); - setStringSerializer(serializer); + setSerializer(StringRedisSerializer.UTF_8); + setStringSerializer(StringRedisSerializer.UTF_8); } /** diff --git a/src/main/java/org/springframework/data/redis/serializer/DefaultRedisSerializationContext.java b/src/main/java/org/springframework/data/redis/serializer/DefaultRedisSerializationContext.java index 772fd52f1..26e1e7ea5 100644 --- a/src/main/java/org/springframework/data/redis/serializer/DefaultRedisSerializationContext.java +++ b/src/main/java/org/springframework/data/redis/serializer/DefaultRedisSerializationContext.java @@ -98,7 +98,7 @@ class DefaultRedisSerializationContext implements RedisSerializationContex private @Nullable SerializationPair valueTuple; private @Nullable SerializationPair hashKeyTuple; private @Nullable SerializationPair hashValueTuple; - private SerializationPair stringTuple = SerializationPair.fromSerializer(new StringRedisSerializer()); + private SerializationPair stringTuple = SerializationPair.fromSerializer(StringRedisSerializer.UTF_8); /* (non-Javadoc) * @see org.springframework.data.redis.serializer.RedisSerializationContextBuilder#key(SerializationPair) diff --git a/src/main/java/org/springframework/data/redis/serializer/RedisSerializationContext.java b/src/main/java/org/springframework/data/redis/serializer/RedisSerializationContext.java index 4daa61bfc..19f1c1ec7 100644 --- a/src/main/java/org/springframework/data/redis/serializer/RedisSerializationContext.java +++ b/src/main/java/org/springframework/data/redis/serializer/RedisSerializationContext.java @@ -93,7 +93,7 @@ public interface RedisSerializationContext { * @return */ static RedisSerializationContext string() { - return fromSerializer(new StringRedisSerializer()); + return fromSerializer(StringRedisSerializer.UTF_8); } /** diff --git a/src/main/java/org/springframework/data/redis/serializer/StringRedisSerializer.java b/src/main/java/org/springframework/data/redis/serializer/StringRedisSerializer.java index 417b0d03d..2a8abd6b1 100644 --- a/src/main/java/org/springframework/data/redis/serializer/StringRedisSerializer.java +++ b/src/main/java/org/springframework/data/redis/serializer/StringRedisSerializer.java @@ -22,20 +22,42 @@ import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Simple String to byte[] (and back) serializer. Converts Strings into bytes and vice-versa using the specified charset - * (by default UTF-8). + * Simple {@literal} to {@literal byte[]} (and back) serializer. Converts Strings into bytes and vice-versa using the + * specified charset (by default UTF-8). *

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

- * Does not perform any null conversion since empty strings are valid keys/values. + * Does not perform any {@literal null} conversion since empty strings are valid keys/values. * * @author Costin Leau * @author Christoph Strobl + * @author Mark Paluch */ public class StringRedisSerializer implements RedisSerializer { private final Charset charset; + /** + * Serializer to use 7 bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set. + * + * @since 2.1 + */ + public static final StringRedisSerializer US_ASCII = new StringRedisSerializer(StandardCharsets.US_ASCII); + + /** + * Serializer to use ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1. + * + * @since 2.1 + */ + public static final StringRedisSerializer ISO_8859_1 = new StringRedisSerializer(StandardCharsets.ISO_8859_1); + + /** + * Serializer to use 8 bit UCS Transformation Format. + * + * @since 2.1 + */ + public static final StringRedisSerializer UTF_8 = new StringRedisSerializer(StandardCharsets.UTF_8); + /** * Creates a new {@link StringRedisSerializer} using {@link StandardCharsets#UTF_8 UTF-8}. */ diff --git a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java index 999a08f56..2ec4c69f4 100644 --- a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java +++ b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java @@ -79,7 +79,7 @@ public class RedisAtomicDouble extends Number implements Serializable, BoundKeyO Assert.notNull(factory, "a valid factory is required"); RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8); redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Double.class)); redisTemplate.setExposeConnection(true); redisTemplate.setConnectionFactory(factory); diff --git a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java index 2e1641e84..3ba3c7d73 100644 --- a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java +++ b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java @@ -102,7 +102,7 @@ public class RedisAtomicInteger extends Number implements Serializable, BoundKey private RedisAtomicInteger(String redisCounter, RedisConnectionFactory factory, @Nullable Integer initialValue) { RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8); redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Integer.class)); redisTemplate.setExposeConnection(true); redisTemplate.setConnectionFactory(factory); diff --git a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java index 2659e408c..766cb29e5 100644 --- a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java +++ b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java @@ -79,7 +79,7 @@ public class RedisAtomicLong extends Number implements Serializable, BoundKeyOpe Assert.notNull(factory, "a valid factory is required"); RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8); redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class)); redisTemplate.setExposeConnection(true); redisTemplate.setConnectionFactory(factory); diff --git a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java index ac20483a9..b48c59048 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -100,7 +100,7 @@ public abstract class AbstractConnectionIntegrationTests { protected StringRedisConnection connection; protected RedisSerializer serializer = new JdkSerializationRedisSerializer(); - protected RedisSerializer stringSerializer = new StringRedisSerializer(); + protected RedisSerializer stringSerializer = StringRedisSerializer.UTF_8; private static final byte[] EMPTY_ARRAY = new byte[0]; diff --git a/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java b/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java index 8b86c0d98..2dce8439a 100644 --- a/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java +++ b/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java @@ -58,7 +58,7 @@ public class DefaultStringRedisConnectionTests { protected DefaultStringRedisConnection connection; - protected StringRedisSerializer serializer = new StringRedisSerializer(); + protected StringRedisSerializer serializer = StringRedisSerializer.UTF_8; protected String foo = "foo"; diff --git a/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java b/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java index cf844c846..ec29ed608 100644 --- a/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java +++ b/src/test/java/org/springframework/data/redis/core/AbstractOperationsTestParams.java @@ -73,13 +73,13 @@ abstract public class AbstractOperationsTestParams { stringTemplate.afterPropertiesSet(); RedisTemplate longTemplate = new RedisTemplate<>(); - longTemplate.setKeySerializer(new StringRedisSerializer()); + longTemplate.setKeySerializer(StringRedisSerializer.UTF_8); longTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class)); longTemplate.setConnectionFactory(jedisConnectionFactory); longTemplate.afterPropertiesSet(); RedisTemplate doubleTemplate = new RedisTemplate<>(); - doubleTemplate.setKeySerializer(new StringRedisSerializer()); + doubleTemplate.setKeySerializer(StringRedisSerializer.UTF_8); doubleTemplate.setValueSerializer(new GenericToStringSerializer<>(Double.class)); doubleTemplate.setConnectionFactory(jedisConnectionFactory); doubleTemplate.afterPropertiesSet(); diff --git a/src/test/java/org/springframework/data/redis/core/DefaultClusterOperationsUnitTests.java b/src/test/java/org/springframework/data/redis/core/DefaultClusterOperationsUnitTests.java index 8803eeae0..fd072b2da 100644 --- a/src/test/java/org/springframework/data/redis/core/DefaultClusterOperationsUnitTests.java +++ b/src/test/java/org/springframework/data/redis/core/DefaultClusterOperationsUnitTests.java @@ -43,6 +43,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @author Christoph Strobl + * @author Mark Paluch */ @RunWith(MockitoJUnitRunner.Silent.class) public class DefaultClusterOperationsUnitTests { @@ -66,7 +67,7 @@ public class DefaultClusterOperationsUnitTests { when(connectionFactory.getConnection()).thenReturn(connection); when(connectionFactory.getClusterConnection()).thenReturn(connection); - serializer = new StringRedisSerializer(); + serializer = StringRedisSerializer.UTF_8; RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); diff --git a/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java b/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java index 609702c86..29672f6b2 100644 --- a/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java +++ b/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java @@ -55,6 +55,7 @@ import org.springframework.test.annotation.IfProfileValue; * * @author Ninad Divadkar * @author Christoph Strobl + * @author Mark Paluch */ @RunWith(Parameterized.class) @IfProfileValue(name = "redisVersion", value = "3.2.0+") @@ -203,8 +204,6 @@ public class DefaultGeoOperationsTests { List result = geoOperations.hash(key, v1, v2); assertThat(result, hasSize(2)); - final RedisSerializer serializer = new StringRedisSerializer(); - assertThat(result.get(0), is(equalTo("sqc8b49rny0"))); assertThat(result.get(1), is(equalTo("sqdtr74hyu0"))); } 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 151349451..5c591f677 100644 --- a/src/test/java/org/springframework/data/redis/core/DefaultReactiveHashOperationsIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/core/DefaultReactiveHashOperationsIntegrationTests.java @@ -75,7 +75,7 @@ public class DefaultReactiveHashOperationsIntegrationTests { lettuceConnectionFactory.afterPropertiesSet(); RedisSerializationContext serializationContext = RedisSerializationContext - .fromSerializer(new StringRedisSerializer()); + .fromSerializer(StringRedisSerializer.UTF_8); ReactiveRedisTemplate stringTemplate = new ReactiveRedisTemplate<>(lettuceConnectionFactory, serializationContext); diff --git a/src/test/java/org/springframework/data/redis/core/ReactiveOperationsTestParams.java b/src/test/java/org/springframework/data/redis/core/ReactiveOperationsTestParams.java index ae9c4d195..f72b9a46c 100644 --- a/src/test/java/org/springframework/data/redis/core/ReactiveOperationsTestParams.java +++ b/src/test/java/org/springframework/data/redis/core/ReactiveOperationsTestParams.java @@ -104,7 +104,7 @@ abstract public class ReactiveOperationsTestParams { ReactiveRedisTemplate pooledObjectTemplate = new ReactiveRedisTemplate<>(poolingConnectionFactory, RedisSerializationContext.fromSerializer(jdkSerializationRedisSerializer)); - StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + StringRedisSerializer stringRedisSerializer = StringRedisSerializer.UTF_8; ReactiveRedisTemplate stringTemplate = new ReactiveRedisTemplate<>(lettuceConnectionFactory, RedisSerializationContext.fromSerializer(stringRedisSerializer)); diff --git a/src/test/java/org/springframework/data/redis/core/ReactiveRedisTemplateIntegrationTests.java b/src/test/java/org/springframework/data/redis/core/ReactiveRedisTemplateIntegrationTests.java index 1e64e5d71..72e02c130 100644 --- a/src/test/java/org/springframework/data/redis/core/ReactiveRedisTemplateIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/core/ReactiveRedisTemplateIntegrationTests.java @@ -191,7 +191,7 @@ public class ReactiveRedisTemplateIntegrationTests { V value = valueFactory.instance(); SerializationPair json = SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer<>(Person.class)); - RedisElementReader resultReader = RedisElementReader.from(new StringRedisSerializer()); + RedisElementReader resultReader = RedisElementReader.from(StringRedisSerializer.UTF_8); assumeFalse(value instanceof Long); @@ -346,7 +346,7 @@ public class ReactiveRedisTemplateIntegrationTests { RedisSerializationContext objectSerializers = RedisSerializationContext. newSerializationContext() .key(serializationContext.getKeySerializationPair()) // .value(serializationContext.getValueSerializationPair()) // - .hashKey(new StringRedisSerializer()) // + .hashKey(StringRedisSerializer.UTF_8) // .hashValue(new JdkSerializationRedisSerializer()) // .build(); diff --git a/src/test/java/org/springframework/data/redis/core/RedisClusterTemplateTests.java b/src/test/java/org/springframework/data/redis/core/RedisClusterTemplateTests.java index 86b4e637d..694b760fe 100644 --- a/src/test/java/org/springframework/data/redis/core/RedisClusterTemplateTests.java +++ b/src/test/java/org/springframework/data/redis/core/RedisClusterTemplateTests.java @@ -166,12 +166,12 @@ public class RedisClusterTemplateTests extends RedisTemplateTests { jedisConnectionFactory.afterPropertiesSet(); RedisTemplate jedisStringTemplate = new RedisTemplate<>(); - jedisStringTemplate.setDefaultSerializer(new StringRedisSerializer()); + jedisStringTemplate.setDefaultSerializer(StringRedisSerializer.UTF_8); jedisStringTemplate.setConnectionFactory(jedisConnectionFactory); jedisStringTemplate.afterPropertiesSet(); RedisTemplate jedisLongTemplate = new RedisTemplate<>(); - jedisLongTemplate.setKeySerializer(new StringRedisSerializer()); + jedisLongTemplate.setKeySerializer(StringRedisSerializer.UTF_8); jedisLongTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class)); jedisLongTemplate.setConnectionFactory(jedisConnectionFactory); jedisLongTemplate.afterPropertiesSet(); @@ -204,12 +204,12 @@ public class RedisClusterTemplateTests extends RedisTemplateTests { lettuceConnectionFactory.afterPropertiesSet(); RedisTemplate lettuceStringTemplate = new RedisTemplate<>(); - lettuceStringTemplate.setDefaultSerializer(new StringRedisSerializer()); + lettuceStringTemplate.setDefaultSerializer(StringRedisSerializer.UTF_8); lettuceStringTemplate.setConnectionFactory(lettuceConnectionFactory); lettuceStringTemplate.afterPropertiesSet(); RedisTemplate lettuceLongTemplate = new RedisTemplate<>(); - lettuceLongTemplate.setKeySerializer(new StringRedisSerializer()); + lettuceLongTemplate.setKeySerializer(StringRedisSerializer.UTF_8); lettuceLongTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class)); lettuceLongTemplate.setConnectionFactory(lettuceConnectionFactory); lettuceLongTemplate.afterPropertiesSet(); diff --git a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java index 54ccc5e7b..f141719b7 100644 --- a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java +++ b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java @@ -309,7 +309,7 @@ public class RedisTemplateTests { assumeTrue(redisTemplate instanceof StringRedisTemplate); - redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8); redisTemplate.setHashKeySerializer(new GenericToStringSerializer<>(Long.class)); redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Person.class)); @@ -800,7 +800,7 @@ public class RedisTemplateTests { final DefaultRedisScript script = new DefaultRedisScript<>(); script.setScriptText("return 'Hey'"); script.setResultType(String.class); - assertEquals("Hey", redisTemplate.execute(script, redisTemplate.getValueSerializer(), new StringRedisSerializer(), + assertEquals("Hey", redisTemplate.execute(script, redisTemplate.getValueSerializer(), StringRedisSerializer.UTF_8, Collections.singletonList(key1))); } diff --git a/src/test/java/org/springframework/data/redis/core/script/AbstractDefaultScriptExecutorTests.java b/src/test/java/org/springframework/data/redis/core/script/AbstractDefaultScriptExecutorTests.java index ce22e1b1c..4402b8074 100644 --- a/src/test/java/org/springframework/data/redis/core/script/AbstractDefaultScriptExecutorTests.java +++ b/src/test/java/org/springframework/data/redis/core/script/AbstractDefaultScriptExecutorTests.java @@ -45,6 +45,7 @@ import org.springframework.test.annotation.IfProfileValue; * @author Jennifer Hickey * @author Thomas Darimont * @author Christoph Strobl + * @author Mark Paluch */ @IfProfileValue(name = "redisVersion", value = "2.6+") public abstract class AbstractDefaultScriptExecutorTests { @@ -90,7 +91,7 @@ public abstract class AbstractDefaultScriptExecutorTests { @Test public void testExecuteBooleanResult() { this.template = new RedisTemplate(); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); template.setValueSerializer(new GenericToStringSerializer<>(Long.class)); template.setConnectionFactory(getConnectionFactory()); template.afterPropertiesSet(); @@ -155,7 +156,7 @@ public abstract class AbstractDefaultScriptExecutorTests { @Test public void testExecuteStatusResult() { this.template = new RedisTemplate(); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); template.setValueSerializer(new GenericToStringSerializer<>(Long.class)); template.setConnectionFactory(getConnectionFactory()); template.afterPropertiesSet(); @@ -171,7 +172,7 @@ public abstract class AbstractDefaultScriptExecutorTests { public void testExecuteCustomResultSerializer() { Jackson2JsonRedisSerializer personSerializer = new Jackson2JsonRedisSerializer<>(Person.class); this.template = new RedisTemplate(); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); template.setValueSerializer(personSerializer); template.setConnectionFactory(getConnectionFactory()); template.afterPropertiesSet(); @@ -180,7 +181,7 @@ public abstract class AbstractDefaultScriptExecutorTests { script.setResultType(String.class); ScriptExecutor scriptExecutor = new DefaultScriptExecutor(template); Person joe = new Person("Joe", "Schmoe", 23); - String result = scriptExecutor.execute(script, personSerializer, new StringRedisSerializer(), + String result = scriptExecutor.execute(script, personSerializer, StringRedisSerializer.UTF_8, Collections.singletonList("bar"), joe); assertEquals("FOO", result); assertEquals(joe, template.boundValueOps("bar").get()); diff --git a/src/test/java/org/springframework/data/redis/core/script/DefaultReactiveScriptExecutorTests.java b/src/test/java/org/springframework/data/redis/core/script/DefaultReactiveScriptExecutorTests.java index c647c1a76..e4c1a82b6 100644 --- a/src/test/java/org/springframework/data/redis/core/script/DefaultReactiveScriptExecutorTests.java +++ b/src/test/java/org/springframework/data/redis/core/script/DefaultReactiveScriptExecutorTests.java @@ -111,7 +111,7 @@ public class DefaultReactiveScriptExecutorTests { public void shouldReturnBoolean() { RedisSerializationContextBuilder builder = RedisSerializationContext - .newSerializationContext(new StringRedisSerializer()); + .newSerializationContext(StringRedisSerializer.UTF_8); builder.value(new GenericToStringSerializer<>(Long.class)); DefaultRedisScript script = new DefaultRedisScript<>(); @@ -142,7 +142,7 @@ public class DefaultReactiveScriptExecutorTests { Flux> mylist = stringScriptExecutor.execute(script, Collections.singletonList("mylist"), Collections.singletonList(1L), RedisElementWriter.from(new GenericToStringSerializer<>(Long.class)), - (RedisElementReader) RedisElementReader.from(new StringRedisSerializer())); + (RedisElementReader) RedisElementReader.from(StringRedisSerializer.UTF_8)); StepVerifier.create(mylist).expectNext(Collections.singletonList("a")).verifyComplete(); } @@ -185,7 +185,7 @@ public class DefaultReactiveScriptExecutorTests { script.setScriptText("return redis.call('SET',KEYS[1], ARGV[1])"); RedisSerializationContextBuilder builder = RedisSerializationContext - .newSerializationContext(new StringRedisSerializer()); + .newSerializationContext(StringRedisSerializer.UTF_8); builder.value(new GenericToStringSerializer<>(Long.class)); ReactiveScriptExecutor scriptExecutor = new DefaultReactiveScriptExecutor<>(connectionFactory, @@ -203,7 +203,7 @@ public class DefaultReactiveScriptExecutorTests { Jackson2JsonRedisSerializer personSerializer = new Jackson2JsonRedisSerializer<>(Person.class); RedisTemplate template = new RedisTemplate<>(); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); template.setValueSerializer(personSerializer); template.setConnectionFactory(getConnectionFactory()); template.afterPropertiesSet(); @@ -215,7 +215,7 @@ public class DefaultReactiveScriptExecutorTests { Person joe = new Person("Joe", "Schmoe", 23); Flux result = stringScriptExecutor.execute(script, Collections.singletonList("bar"), Collections.singletonList(joe), RedisElementWriter.from(personSerializer), - RedisElementReader.from(new StringRedisSerializer())); + RedisElementReader.from(StringRedisSerializer.UTF_8)); StepVerifier.create(result).expectNext("FOO").verifyComplete(); diff --git a/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java b/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java index 27017cf2b..11582de29 100644 --- a/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java +++ b/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java @@ -36,10 +36,11 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; * @author Costin Leau * @author Greg Turnquist * @author Thomas Darimont + * @author Mark Paluch */ public class MessageListenerTest { - private static final StringRedisSerializer serializer = new StringRedisSerializer(); + private static final StringRedisSerializer serializer = StringRedisSerializer.UTF_8; private static final String CHANNEL = "some::test:"; private static final byte[] RAW_CHANNEL = serializer.serialize(CHANNEL); private static final String PAYLOAD = "do re mi"; diff --git a/src/test/java/org/springframework/data/redis/serializer/RedisSerializationContextUnitTests.java b/src/test/java/org/springframework/data/redis/serializer/RedisSerializationContextUnitTests.java index 77959adbc..b639c6da0 100644 --- a/src/test/java/org/springframework/data/redis/serializer/RedisSerializationContextUnitTests.java +++ b/src/test/java/org/springframework/data/redis/serializer/RedisSerializationContextUnitTests.java @@ -33,9 +33,9 @@ public class RedisSerializationContextUnitTests { public void shouldRejectBuildIfKeySerializerIsNotSet() { RedisSerializationContext. newSerializationContext() // - .value(new StringRedisSerializer()) // - .hashKey(new StringRedisSerializer()) // - .hashValue(new StringRedisSerializer()) // + .value(StringRedisSerializer.UTF_8) // + .hashKey(StringRedisSerializer.UTF_8) // + .hashValue(StringRedisSerializer.UTF_8) // .build(); } @@ -43,9 +43,9 @@ public class RedisSerializationContextUnitTests { public void shouldRejectBuildIfValueSerializerIsNotSet() { RedisSerializationContext. newSerializationContext() // - .key(new StringRedisSerializer()) // - .hashKey(new StringRedisSerializer()) // - .hashValue(new StringRedisSerializer()) // + .key(StringRedisSerializer.UTF_8) // + .hashKey(StringRedisSerializer.UTF_8) // + .hashValue(StringRedisSerializer.UTF_8) // .build(); } @@ -53,9 +53,9 @@ public class RedisSerializationContextUnitTests { public void shouldRejectBuildIfHashKeySerializerIsNotSet() { RedisSerializationContext. newSerializationContext() // - .key(new StringRedisSerializer()) // - .value(new StringRedisSerializer()) // - .hashValue(new StringRedisSerializer()) // + .key(StringRedisSerializer.UTF_8) // + .value(StringRedisSerializer.UTF_8) // + .hashValue(StringRedisSerializer.UTF_8) // .build(); } @@ -63,16 +63,16 @@ public class RedisSerializationContextUnitTests { public void shouldRejectBuildIfHashValueSerializerIsNotSet() { RedisSerializationContext. newSerializationContext() // - .key(new StringRedisSerializer()) // - .value(new StringRedisSerializer()) // - .hashKey(new StringRedisSerializer()) // + .key(StringRedisSerializer.UTF_8) // + .value(StringRedisSerializer.UTF_8) // + .hashKey(StringRedisSerializer.UTF_8) // .build(); } @Test // DATAREDIS-602 public void shouldUseDefaultIfSet() { - RedisSerializationContext. newSerializationContext(new StringRedisSerializer()) + RedisSerializationContext. newSerializationContext(StringRedisSerializer.UTF_8) .key(new GenericToStringSerializer(Long.class))// .build(); } @@ -114,10 +114,10 @@ public class RedisSerializationContextUnitTests { private RedisSerializationContext createSerializationContext() { return RedisSerializationContext. newSerializationContext() // - .key(new StringRedisSerializer()) // + .key(StringRedisSerializer.UTF_8) // .value(ByteBuffer::getLong, value -> (ByteBuffer) ByteBuffer.allocate(8).putLong(value).flip()) // - .hashKey(new StringRedisSerializer()) // - .hashValue(new StringRedisSerializer()) // + .hashKey(StringRedisSerializer.UTF_8) // + .hashValue(StringRedisSerializer.UTF_8) // .build(); } } diff --git a/src/test/java/org/springframework/data/redis/serializer/StringRedisSerializerUnitTests.java b/src/test/java/org/springframework/data/redis/serializer/StringRedisSerializerUnitTests.java new file mode 100644 index 000000000..7dcfe7bfe --- /dev/null +++ b/src/test/java/org/springframework/data/redis/serializer/StringRedisSerializerUnitTests.java @@ -0,0 +1,70 @@ +/* + * Copyright 2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.redis.serializer; + +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +import java.nio.charset.StandardCharsets; + +import org.junit.Test; + +/** + * Unit tests for {@link StringRedisSerializer}. + * + * @author Mark Paluch + */ +public class StringRedisSerializerUnitTests { + + @Test + public void shouldSerializeToAscii() { + + assertThat(StringRedisSerializer.US_ASCII.serialize("foo-bar"), is(equalTo("foo-bar".getBytes()))); + assertThat(StringRedisSerializer.US_ASCII.serialize("üߨ"), is(equalTo("???".getBytes()))); + } + + @Test + public void shouldDeserializeFromAscii() { + + assertThat(StringRedisSerializer.US_ASCII.deserialize("foo-bar".getBytes()), is(equalTo("foo-bar"))); + } + + @Test + public void shouldSerializeToIso88591() { + + assertThat(StringRedisSerializer.ISO_8859_1.serialize("üߨ"), + is(equalTo("üߨ".getBytes(StandardCharsets.ISO_8859_1)))); + } + + @Test + public void shouldDeserializeFromIso88591() { + + assertThat(StringRedisSerializer.ISO_8859_1.deserialize("üߨ".getBytes(StandardCharsets.ISO_8859_1)), + is(equalTo("üߨ"))); + } + + @Test + public void shouldSerializeToUtf8() { + + assertThat(StringRedisSerializer.UTF_8.serialize("foo-bar"), is(equalTo("foo-bar".getBytes()))); + assertThat(StringRedisSerializer.UTF_8.serialize("üߨ"), is(equalTo("üߨ".getBytes(StandardCharsets.UTF_8)))); + } + + @Test + public void shouldDeserializeFromUtf8() { + assertThat(StringRedisSerializer.UTF_8.deserialize("üߨ".getBytes(StandardCharsets.UTF_8)), is(equalTo("üߨ"))); + } +} diff --git a/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicDoubleTests.java b/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicDoubleTests.java index 736314083..47012486f 100644 --- a/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicDoubleTests.java +++ b/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicDoubleTests.java @@ -62,7 +62,7 @@ public class RedisAtomicDoubleTests extends AbstractRedisAtomicsTests { this.template = new RedisTemplate<>(); this.template.setConnectionFactory(factory); - this.template.setKeySerializer(new StringRedisSerializer()); + this.template.setKeySerializer(StringRedisSerializer.UTF_8); this.template.setValueSerializer(new GenericToStringSerializer<>(Double.class)); this.template.afterPropertiesSet(); @@ -192,7 +192,7 @@ public class RedisAtomicDoubleTests extends AbstractRedisAtomicsTests { expectedException.expectMessage("a valid value serializer in template is required"); RedisTemplate template = new RedisTemplate<>(); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); new RedisAtomicDouble("foo", template); } diff --git a/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicIntegerTests.java b/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicIntegerTests.java index 57a947a0f..b5cf24ff5 100644 --- a/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicIntegerTests.java +++ b/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicIntegerTests.java @@ -60,7 +60,7 @@ public class RedisAtomicIntegerTests extends AbstractRedisAtomicsTests { this.template = new RedisTemplate<>(); this.template.setConnectionFactory(factory); - this.template.setKeySerializer(new StringRedisSerializer()); + this.template.setKeySerializer(StringRedisSerializer.UTF_8); this.template.setValueSerializer(new GenericToStringSerializer<>(Integer.class)); this.template.afterPropertiesSet(); @@ -191,7 +191,7 @@ public class RedisAtomicIntegerTests extends AbstractRedisAtomicsTests { expectedException.expectMessage("a valid value serializer in template is required"); RedisTemplate template = new RedisTemplate<>(); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); new RedisAtomicInteger("foo", template); } diff --git a/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicLongTests.java b/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicLongTests.java index 11a62f987..dffd52d4a 100644 --- a/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicLongTests.java +++ b/src/test/java/org/springframework/data/redis/support/atomic/RedisAtomicLongTests.java @@ -41,6 +41,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; * @author Jennifer Hickey * @author Thomas Darimont * @author Christoph Strobl + * @author Mark Paluch */ @RunWith(Parameterized.class) public class RedisAtomicLongTests extends AbstractRedisAtomicsTests { @@ -56,7 +57,7 @@ public class RedisAtomicLongTests extends AbstractRedisAtomicsTests { this.template = new RedisTemplate<>(); this.template.setConnectionFactory(factory); - this.template.setKeySerializer(new StringRedisSerializer()); + this.template.setKeySerializer(StringRedisSerializer.UTF_8); this.template.setValueSerializer(new GenericToStringSerializer<>(Long.class)); this.template.afterPropertiesSet(); @@ -165,7 +166,7 @@ public class RedisAtomicLongTests extends AbstractRedisAtomicsTests { expectedException.expectMessage("a valid value serializer in template is required"); RedisTemplate template = new RedisTemplate<>(); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); new RedisAtomicLong("foo", template); } @@ -174,7 +175,7 @@ public class RedisAtomicLongTests extends AbstractRedisAtomicsTests { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(factory); - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(StringRedisSerializer.UTF_8); template.setValueSerializer(new GenericToStringSerializer<>(Long.class)); template.afterPropertiesSet(); diff --git a/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java b/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java index a70ebe67f..040dc48fb 100644 --- a/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java +++ b/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java @@ -54,7 +54,7 @@ public abstract class CollectionTestParams { } OxmSerializer serializer = new OxmSerializer(xstream, xstream); Jackson2JsonRedisSerializer jackson2JsonSerializer = new Jackson2JsonRedisSerializer<>(Person.class); - StringRedisSerializer stringSerializer = new StringRedisSerializer(); + StringRedisSerializer stringSerializer = StringRedisSerializer.UTF_8; // create Jedis Factory ObjectFactory stringFactory = new StringObjectFactory(); diff --git a/src/test/java/org/springframework/data/redis/support/collections/RedisMapTests.java b/src/test/java/org/springframework/data/redis/support/collections/RedisMapTests.java index f3fb03704..387326718 100644 --- a/src/test/java/org/springframework/data/redis/support/collections/RedisMapTests.java +++ b/src/test/java/org/springframework/data/redis/support/collections/RedisMapTests.java @@ -45,6 +45,7 @@ import org.springframework.oxm.xstream.XStreamMarshaller; * @author Jennifer Hickey * @author Thomas Darimont * @author Christoph Strobl + * @author Mark Paluch */ public class RedisMapTests extends AbstractRedisMapTests { @@ -75,7 +76,7 @@ public class RedisMapTests extends AbstractRedisMapTests { Jackson2JsonRedisSerializer jackson2JsonSerializer = new Jackson2JsonRedisSerializer<>(Person.class); Jackson2JsonRedisSerializer jackson2JsonStringSerializer = new Jackson2JsonRedisSerializer<>( String.class); - StringRedisSerializer stringSerializer = new StringRedisSerializer(); + StringRedisSerializer stringSerializer = StringRedisSerializer.UTF_8; PoolConfig defaultPoolConfig = new PoolConfig(); defaultPoolConfig.setMaxActive(1000);