From 0c90dea0122c1640707c03f8794f9e9d5f2c756a Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 13 Jan 2025 14:35:13 +0100 Subject: [PATCH] Use Integer return type for Number return types except Double and Float. Lettuce's ValueOutput doesn't RESP 3 long values so we must use IntegerOutput instead. Closes #3090 --- .../data/redis/connection/ReturnType.java | 6 +++++- .../data/redis/connection/ReturnTypeUnitTests.java | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/connection/ReturnType.java b/src/main/java/org/springframework/data/redis/connection/ReturnType.java index 2ba37e2ab9..5085e6e6bd 100644 --- a/src/main/java/org/springframework/data/redis/connection/ReturnType.java +++ b/src/main/java/org/springframework/data/redis/connection/ReturnType.java @@ -73,7 +73,11 @@ public static ReturnType fromJavaType(@Nullable Class javaType) { return ReturnType.BOOLEAN; } - if (ClassUtils.isAssignable(Long.class, javaType)) { + if (ClassUtils.isAssignable(Double.class, javaType) || ClassUtils.isAssignable(Float.class, javaType)) { + return ReturnType.VALUE; + } + + if (ClassUtils.isAssignable(Number.class, javaType)) { return ReturnType.INTEGER; } diff --git a/src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java b/src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java index a455115c34..fb5c24bf16 100644 --- a/src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java @@ -34,8 +34,19 @@ class ReturnTypeUnitTests { @ParameterizedTest // DATAREDIS-1245 @ValueSource(classes = { List.class, ArrayList.class, LinkedList.class }) void shouldConsiderListsAsMultiType(Class listClass) { - assertThat(ReturnType.fromJavaType(listClass)).isEqualTo(ReturnType.MULTI); } + @ParameterizedTest // GH-3090 + @ValueSource(classes = { Integer.class, Long.class, Number.class }) + void shouldConsiderIntegerType(Class listClass) { + assertThat(ReturnType.fromJavaType(listClass)).isEqualTo(ReturnType.INTEGER); + } + + @ParameterizedTest // GH-3090 + @ValueSource(classes = { Double.class, Float.class, String.class }) + void shouldConsiderValueType(Class listClass) { + assertThat(ReturnType.fromJavaType(listClass)).isEqualTo(ReturnType.VALUE); + } + }