diff --git a/src/main/java/org/springframework/data/redis/core/AbstractOperations.java b/src/main/java/org/springframework/data/redis/core/AbstractOperations.java index 7fc53e624..49df0b775 100644 --- a/src/main/java/org/springframework/data/redis/core/AbstractOperations.java +++ b/src/main/java/org/springframework/data/redis/core/AbstractOperations.java @@ -387,7 +387,8 @@ abstract class AbstractOperations { * @return converted or {@literal null}. * @since 1.8 */ - GeoResults> deserializeGeoResults(GeoResults> source) { + @Nullable + GeoResults> deserializeGeoResults(@Nullable GeoResults> source) { if (source == null) { return null; diff --git a/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsIntegrationTests.java b/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsIntegrationTests.java index 78dd72456..f0877d45a 100644 --- a/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsIntegrationTests.java @@ -26,8 +26,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.assertj.core.data.Offset; import org.junit.jupiter.api.BeforeEach; +import org.springframework.dao.DataAccessException; import org.springframework.data.geo.Circle; import org.springframework.data.geo.Distance; import org.springframework.data.geo.GeoResults; @@ -42,6 +44,7 @@ import org.springframework.data.redis.domain.geo.GeoReference; import org.springframework.data.redis.test.condition.EnabledOnCommand; import org.springframework.data.redis.test.extension.parametrized.MethodSource; import org.springframework.data.redis.test.extension.parametrized.ParameterizedRedisTest; +import org.springframework.lang.Nullable; /** * Integration test of {@link org.springframework.data.redis.core.DefaultGeoOperations} @@ -225,6 +228,28 @@ public class DefaultGeoOperationsIntegrationTests { assertThat(result.get(2)).isNull(); } + @ParameterizedRedisTest // GH-2279 + void geoRadius() { + + K key = keyFactory.instance(); + + geoOperations.add(key, POINT_PALERMO, valueFactory.instance()); + geoOperations.add(key, POINT_CATANIA, valueFactory.instance()); + + List result = redisTemplate.executePipelined(new SessionCallback() { + @Nullable + @Override + public GeoResults execute(RedisOperations operations) throws DataAccessException { + + return operations.opsForGeo().radius((K) key, new Circle(POINT_PALERMO, new Distance(1, KILOMETERS))); + } + }); + + GeoResults> results = (GeoResults>) result.get(0); + assertThat(results).hasSize(1); + assertThat(results.getContent().get(0).getDistance().getValue()).isCloseTo(0, Offset.offset(0.005)); + } + @ParameterizedRedisTest // DATAREDIS-438, DATAREDIS-614 void geoRadiusShouldReturnMembersCorrectly() {