Skip to content

Commit 6cdf378

Browse files
committed
Fixes #3179 - Restore missing _class metadata for collections in MappingRedisConverter
Signed-off-by: Nabil Fawwaz Elqayyim <[email protected]>
1 parent cff6689 commit 6cdf378

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ public void write(@Nullable Object source, RedisData sink) {
403403
}
404404

405405
if (source instanceof Collection collection) {
406+
typeMapper.writeType(ClassUtils.getUserClass(source), sink.getBucket().getPath());
406407
writeCollection(sink.getKeyspace(), "", collection, TypeInformation.of(Object.class), sink);
407408
return;
408409
}

src/test/java/org/springframework/data/redis/core/convert/MappingRedisConverterUnitTests.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
import org.springframework.data.redis.core.mapping.RedisMappingContext;
7979
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
8080
import org.springframework.data.redis.test.util.RedisTestData;
81+
import org.springframework.util.ClassUtils;
8182
import org.springframework.util.StringUtils;
8283

8384
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
@@ -1994,16 +1995,22 @@ void readGenericEntity() {
19941995
assertThat(generic.entity.name).isEqualTo("hello");
19951996
}
19961997

1997-
@Test // GH-2168
1998+
@Test // GH-2168, GH-3179
19981999
void writePlainList() {
1999-
20002000
List<Object> source = Arrays.asList("Hello", "stream", "message", 100L);
20012001
RedisTestData target = write(source);
2002-
2003-
assertThat(target).containsEntry("[0]", "Hello") //
2004-
.containsEntry("[1]", "stream") //
2005-
.containsEntry("[2]", "message") //
2006-
.containsEntry("[3]", "100");
2002+
Object classValue = target.getBucket().get("_class");
2003+
2004+
assertThat(classValue)
2005+
.as("_class metadata should be written")
2006+
.isNotNull()
2007+
.isInstanceOf(byte[].class);
2008+
assertThat(new String((byte[]) classValue, StandardCharsets.UTF_8))
2009+
.isEqualTo(ClassUtils.getUserClass(source).getName());
2010+
assertThat(target).containsEntry("[0]", "Hello")
2011+
.containsEntry("[1]", "stream")
2012+
.containsEntry("[2]", "message")
2013+
.containsEntry("[3]", "100");
20072014
}
20082015

20092016
@Test // DATAREDIS-1175

0 commit comments

Comments
 (0)