DATAREDIS-1000 - Fix raw/byte array serialization via RedisSerializationContext.
We now use the correct generic parameters for raw serialization via RedisSerializationContext returning ByteBuffer. Introduce RedisSerializer.raw() and cleanups. Original Pull Request: #459
This commit is contained in:
committed by
Christoph Strobl
parent
3839379470
commit
1491b93078
@@ -13,13 +13,13 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.redis.stream;
|
||||
package org.springframework.data.redis.serializer;
|
||||
|
||||
import org.springframework.data.redis.serializer.RedisSerializer;
|
||||
import org.springframework.data.redis.serializer.SerializationException;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
* Raw {@link RedisSerializer} using {@code byte[]}.
|
||||
*
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
enum RawRedisSerializer implements RedisSerializer<byte[]> {
|
||||
@@ -79,12 +79,23 @@ public interface RedisSerializationContext<K, V> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link RedisSerializationContext} using a {@link SerializationPair#raw()} serialization pair.
|
||||
* Creates a new {@link RedisSerializationContext} using a {@link SerializationPair#raw() ByteBuffer} serialization
|
||||
* pair.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
static RedisSerializationContext<byte[], byte[]> raw() {
|
||||
return just(SerializationPair.raw());
|
||||
static RedisSerializationContext<ByteBuffer, ByteBuffer> raw() {
|
||||
return just(RedisSerializerToSerializationPairAdapter.raw());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link RedisSerializationContext} using a {@link RedisSerializer#raw() byte[]} serialization.
|
||||
*
|
||||
* @return
|
||||
* @since 2.2
|
||||
*/
|
||||
static RedisSerializationContext<byte[], byte[]> byteArray() {
|
||||
return just(RedisSerializerToSerializationPairAdapter.byteArray());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -207,7 +218,7 @@ public interface RedisSerializationContext<K, V> {
|
||||
*
|
||||
* @return a pass through {@link SerializationPair}.
|
||||
*/
|
||||
static <T> SerializationPair<T> raw() {
|
||||
static SerializationPair<ByteBuffer> raw() {
|
||||
return RedisSerializerToSerializationPairAdapter.raw();
|
||||
}
|
||||
|
||||
|
||||
@@ -92,6 +92,16 @@ public interface RedisSerializer<T> {
|
||||
return StringRedisSerializer.UTF_8;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain a raw {@link RedisSerializer} that passes thru {@code byte[]}.
|
||||
*
|
||||
* @return never {@literal null}.
|
||||
* @since 2.2
|
||||
*/
|
||||
static RedisSerializer<byte[]> raw() {
|
||||
return RawRedisSerializer.INSTANCE;
|
||||
}
|
||||
|
||||
default boolean canSerialize(Class<?> type) {
|
||||
return ClassUtils.isAssignable(getTargetType(), type);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package org.springframework.data.redis.serializer;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -31,18 +33,25 @@ class RedisSerializerToSerializationPairAdapter<T> implements SerializationPair<
|
||||
private final static RedisSerializerToSerializationPairAdapter<?> RAW = new RedisSerializerToSerializationPairAdapter<>(
|
||||
null);
|
||||
|
||||
private final static RedisSerializerToSerializationPairAdapter<byte[]> BYTE_ARRAY = new RedisSerializerToSerializationPairAdapter<>(
|
||||
RedisSerializer.raw());
|
||||
|
||||
private final DefaultSerializationPair pair;
|
||||
|
||||
protected RedisSerializerToSerializationPairAdapter(@Nullable RedisSerializer<T> serializer) {
|
||||
pair = new DefaultSerializationPair(new DefaultRedisElementReader<>(serializer),
|
||||
RedisSerializerToSerializationPairAdapter(@Nullable RedisSerializer<T> serializer) {
|
||||
pair = new DefaultSerializationPair<>(new DefaultRedisElementReader<>(serializer),
|
||||
new DefaultRedisElementWriter<>(serializer));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> SerializationPair<T> raw() {
|
||||
static SerializationPair<ByteBuffer> raw() {
|
||||
return (SerializationPair) RAW;
|
||||
}
|
||||
|
||||
static SerializationPair<byte[]> byteArray() {
|
||||
return BYTE_ARRAY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a {@link SerializationPair} from given {@link RedisSerializer}.
|
||||
*
|
||||
|
||||
@@ -722,8 +722,8 @@ public interface StreamMessageListenerContainer<K, V extends Record<K, ?>> exten
|
||||
|
||||
if (this.hashMapper == null) {
|
||||
|
||||
hashKeySerializer(RawRedisSerializer.INSTANCE);
|
||||
hashValueSerializer(RawRedisSerializer.INSTANCE);
|
||||
hashKeySerializer(RedisSerializer.raw());
|
||||
hashValueSerializer(RedisSerializer.raw());
|
||||
return (StreamMessageListenerContainerOptionsBuilder) objectMapper(new ObjectHashMapper());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user