From 6cdf37825194e3676a48490ce4db15940e7f15d5 Mon Sep 17 00:00:00 2001 From: Nabil Fawwaz Elqayyim Date: Thu, 24 Jul 2025 17:39:48 +0700 Subject: [PATCH] Fixes #3179 - Restore missing _class metadata for collections in MappingRedisConverter Signed-off-by: Nabil Fawwaz Elqayyim --- .../core/convert/MappingRedisConverter.java | 1 + .../MappingRedisConverterUnitTests.java | 21 ++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) 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 ee03f07f61..2fb718abc9 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 @@ -403,6 +403,7 @@ public void write(@Nullable Object source, RedisData sink) { } if (source instanceof Collection collection) { + typeMapper.writeType(ClassUtils.getUserClass(source), sink.getBucket().getPath()); writeCollection(sink.getKeyspace(), "", collection, TypeInformation.of(Object.class), sink); return; } 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 a01123bafe..58dda61744 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 @@ -78,6 +78,7 @@ import org.springframework.data.redis.core.mapping.RedisMappingContext; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.test.util.RedisTestData; +import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; @@ -1994,16 +1995,22 @@ void readGenericEntity() { assertThat(generic.entity.name).isEqualTo("hello"); } - @Test // GH-2168 + @Test // GH-2168, GH-3179 void writePlainList() { - List source = Arrays.asList("Hello", "stream", "message", 100L); RedisTestData target = write(source); - - assertThat(target).containsEntry("[0]", "Hello") // - .containsEntry("[1]", "stream") // - .containsEntry("[2]", "message") // - .containsEntry("[3]", "100"); + Object classValue = target.getBucket().get("_class"); + + assertThat(classValue) + .as("_class metadata should be written") + .isNotNull() + .isInstanceOf(byte[].class); + assertThat(new String((byte[]) classValue, StandardCharsets.UTF_8)) + .isEqualTo(ClassUtils.getUserClass(source).getName()); + assertThat(target).containsEntry("[0]", "Hello") + .containsEntry("[1]", "stream") + .containsEntry("[2]", "message") + .containsEntry("[3]", "100"); } @Test // DATAREDIS-1175