From 713a12bce95f106e87f31c424a4a19bc9fec2037 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 25 Oct 2018 13:21:23 +0200 Subject: [PATCH] DATAREDIS-875 - Omit MappingRedisConverter type hint for primitive type properties. We now additionally check if the target property is a primitive type and do no longer add the type hint if so. Original pull request: #368. --- .../core/convert/MappingRedisConverter.java | 6 +++++- .../MappingRedisConverterUnitTests.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java b/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java index 06a783a6d..8f550532b 100644 --- a/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java +++ b/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java @@ -298,6 +298,10 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { byte[] sourceBytes = source.getBucket().get(currentPath); + if(typeInformation.getType().isPrimitive() && sourceBytes == null) { + return null; + } + if (persistentProperty.isIdProperty() && StringUtils.isEmpty(path.isEmpty())) { return sourceBytes == null ? fromBytes(sourceBytes, typeInformation.getActualType().getType()) : source.getId(); } @@ -739,7 +743,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { Optional> targetType = customConversions.getCustomWriteTarget(value.getClass()); - if (!targetType.filter(it -> ClassUtils.isAssignable(Map.class, it)).isPresent() + if (!propertyType.isPrimitive() && !targetType.filter(it -> ClassUtils.isAssignable(Map.class, it)).isPresent() && customConversions.isSimpleType(value.getClass()) && value.getClass() != propertyType) { typeMapper.writeType(value.getClass(), sink.getBucket().getPropertyPath(path)); } diff --git a/src/test/java/org/springframework/data/redis/core/convert/MappingRedisConverterUnitTests.java b/src/test/java/org/springframework/data/redis/core/convert/MappingRedisConverterUnitTests.java index 782bdf351..281daa8b6 100644 --- a/src/test/java/org/springframework/data/redis/core/convert/MappingRedisConverterUnitTests.java +++ b/src/test/java/org/springframework/data/redis/core/convert/MappingRedisConverterUnitTests.java @@ -1814,6 +1814,24 @@ public class MappingRedisConverterUnitTests { assertThat(write(update).getBucket().get("_class"), is(nullValue())); } + @Test // DATAREDIS-875 + public void shouldNotWriteTypeHintForPrimitveTypes() { + + Size source = new Size(); + source.height = 1; + + assertThat(write(source).getBucket().get("height._class"), is(nullValue())); + } + + @Test // DATAREDIS-875 + public void shouldReadPrimitveTypes() { + + Map source = new LinkedHashMap<>(); + source.put("height", "1000"); + + assertThat(read(Size.class, source).height, is(equalTo(1000))); + } + private RedisData write(Object source) { RedisData rdo = new RedisData();