diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/SortMethodArgumentResolver.java b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/SortMethodArgumentResolver.java
index 9929ae87..912edd6f 100644
--- a/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/SortMethodArgumentResolver.java
+++ b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/SortMethodArgumentResolver.java
@@ -50,12 +50,17 @@ public class SortMethodArgumentResolver implements HandlerMethodArgumentResolver
return parameter.nestedIfOptional().getNestedParameterType().equals(Sort.class);
}
+ @SuppressWarnings("ConstantValue")
@Override
public Object resolveArgument(MethodParameter parameter, DataFetchingEnvironment environment) {
+
Sort sort = this.sortStrategy.extract(environment);
+
if (parameter.isOptional()) {
+ sort = (sort == Sort.unsorted() ? null : sort);
return Optional.ofNullable(sort);
}
+
return (sort != null ? sort : Sort.unsorted());
}
diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/Subrange.java b/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/Subrange.java
index 6dbfc2a7..9039b449 100644
--- a/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/Subrange.java
+++ b/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/Subrange.java
@@ -18,6 +18,7 @@ package org.springframework.graphql.data.pagination;
import java.util.Optional;
+import java.util.OptionalInt;
import org.springframework.lang.Nullable;
@@ -28,13 +29,12 @@ import org.springframework.lang.Nullable;
* @author Rossen Stoyanchev
* @since 1.2
*/
+@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
public class Subrange
{
- @Nullable
- private final P position;
+ private final Optional
position;
- @Nullable
- private final Integer count;
+ private final OptionalInt count;
private final boolean forward;
@@ -43,9 +43,9 @@ public class Subrange
{
* Constructor with the relative position, count, and direction.
*/
public Subrange(@Nullable P position, @Nullable Integer count, boolean forward) {
- this.position = position;
+ this.position = Optional.ofNullable(position);
+ this.count = (count != null ? OptionalInt.of(count) : OptionalInt.empty());
this.forward = forward;
- this.count = count;
}
@@ -55,15 +55,15 @@ public class Subrange
{
* Cursor connection spec via {@link CursorStrategy}.
*/
public Optional
position() {
- return Optional.ofNullable(this.position);
+ return this.position;
}
/**
* The number of elements in the subrange based on the "first" and "last"
* arguments from the GraphQL Cursor connection spec.
*/
- public Optional count() {
- return Optional.ofNullable(this.count);
+ public OptionalInt count() {
+ return this.count;
}
/**
diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/query/SortStrategy.java b/spring-graphql/src/main/java/org/springframework/graphql/data/query/SortStrategy.java
index 9f219969..3c5d556e 100644
--- a/spring-graphql/src/main/java/org/springframework/graphql/data/query/SortStrategy.java
+++ b/spring-graphql/src/main/java/org/springframework/graphql/data/query/SortStrategy.java
@@ -20,7 +20,6 @@ package org.springframework.graphql.data.query;
import graphql.schema.DataFetchingEnvironment;
import org.springframework.data.domain.Sort;
-import org.springframework.lang.Nullable;
/**
* Strategy to extract {@link Sort} details from GraphQL arguments.
@@ -31,9 +30,9 @@ import org.springframework.lang.Nullable;
public interface SortStrategy {
/**
- * Return a {@link Sort} instance initialized from GraphQL arguments, or {@code null}.
+ * Return a {@link Sort} instance by extracting the sort information from
+ * GraphQL arguments, or {@link Sort#unsorted()} otherwise.
*/
- @Nullable
Sort extract(DataFetchingEnvironment environment);
}
diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SubrangeMethodArgumentResolverTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SubrangeMethodArgumentResolverTests.java
index 656cb13d..8043355f 100644
--- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SubrangeMethodArgumentResolverTests.java
+++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SubrangeMethodArgumentResolverTests.java
@@ -76,7 +76,7 @@ public class SubrangeMethodArgumentResolverTests extends ArgumentResolverTestSup
private static void testRequest(int count, int index, Object result, boolean forward) {
Subrange subrange = (Subrange) result;
assertThat(subrange.position().get().index()).isEqualTo(index);
- assertThat(subrange.count().get()).isEqualTo(count);
+ assertThat(subrange.count().orElse(0)).isEqualTo(count);
assertThat(subrange.forward()).isEqualTo(forward);
}
diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/query/ScrollSubrangeTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/query/ScrollSubrangeTests.java
index 308d41de..2442b9eb 100644
--- a/spring-graphql/src/test/java/org/springframework/graphql/data/query/ScrollSubrangeTests.java
+++ b/spring-graphql/src/test/java/org/springframework/graphql/data/query/ScrollSubrangeTests.java
@@ -42,12 +42,12 @@ public class ScrollSubrangeTests {
ScrollSubrange subrange = new ScrollSubrange(position, count, true);
assertThat(((OffsetScrollPosition) subrange.position().get())).isEqualTo(position);
- assertThat(subrange.count().get()).isEqualTo(count);
+ assertThat(subrange.count().orElse(0)).isEqualTo(count);
assertThat(subrange.forward()).isTrue();
subrange = new ScrollSubrange(position, count, false);
assertThat(((OffsetScrollPosition) subrange.position().get()).getOffset()).isEqualTo(20);
- assertThat(subrange.count().get()).isEqualTo(count);
+ assertThat(subrange.count().orElse(0)).isEqualTo(count);
assertThat(subrange.forward()).isTrue();
}
@@ -65,14 +65,14 @@ public class ScrollSubrangeTests {
KeysetScrollPosition actualPosition = (KeysetScrollPosition) subrange.position().get();
assertThat(actualPosition.getKeys()).isEqualTo(keys);
assertThat(actualPosition.getDirection()).isEqualTo(Direction.Forward);
- assertThat(subrange.count().get()).isEqualTo(count);
+ assertThat(subrange.count().orElse(0)).isEqualTo(count);
assertThat(subrange.forward()).isTrue();
subrange = new ScrollSubrange(position, count, false);
actualPosition = (KeysetScrollPosition) subrange.position().get();
assertThat(actualPosition.getKeys()).isEqualTo(keys);
assertThat(actualPosition.getDirection()).isEqualTo(Direction.Backward);
- assertThat(subrange.count().get()).isEqualTo(count);
+ assertThat(subrange.count().orElse(0)).isEqualTo(count);
assertThat(subrange.forward()).isFalse();
}