diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java b/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java index 6e186a67..b2b2bf66 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java @@ -217,6 +217,10 @@ public final class ConnectionFieldTypeVisitor extends GraphQLTypeVisitorStub { } Collection nodes = this.adapter.getContent(container); + if (nodes.isEmpty()) { + return EMPTY_CONNECTION; + } + int index = 0; List> edges = new ArrayList<>(nodes.size()); for (T node : nodes) { diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java index 66631abc..8008091a 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java @@ -66,6 +66,23 @@ public class SchemaMappingPaginationTests { "}}}"); } + @Test // gh-775 + void zeroResults() { + + String document = BookSource.booksConnectionQuery("first:0, after:\"O_3\""); + Mono response = graphQlService().execute(document); + + ResponseHelper.forResponse(response).assertData(""" + {"books":{\ + "edges":[],\ + "pageInfo":{\ + "startCursor":null,\ + "endCursor":null,\ + "hasPreviousPage":false,\ + "hasNextPage":false}}}""" + ); + } + private TestExecutionGraphQlService graphQlService() { ScrollPositionCursorStrategy cursorStrategy = new ScrollPositionCursorStrategy();