diff --git a/spring-graphql/src/main/java/org/springframework/graphql/server/WebGraphQlRequest.java b/spring-graphql/src/main/java/org/springframework/graphql/server/WebGraphQlRequest.java index 2c34fef9..f9f04d87 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/server/WebGraphQlRequest.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/server/WebGraphQlRequest.java @@ -69,7 +69,7 @@ public class WebGraphQlRequest extends DefaultExecutionGraphQlRequest implements private static String getQuery(Map body) { Object value = body.get("query"); - if (!(value instanceof String query) || !StringUtils.hasText(query)) { + if (!(value instanceof String) || !StringUtils.hasText((String) value)) { throw new ServerWebInputException("Invalid value for 'query'"); } return (String) value; diff --git a/spring-graphql/src/test/java/org/springframework/graphql/server/WebGraphQlRequestTests.java b/spring-graphql/src/test/java/org/springframework/graphql/server/WebGraphQlRequestTests.java index c6e18ea8..3da7ca30 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/server/WebGraphQlRequestTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/server/WebGraphQlRequestTests.java @@ -18,6 +18,7 @@ package org.springframework.graphql.server; import java.net.URI; import java.util.Collections; +import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; @@ -37,18 +38,28 @@ public class WebGraphQlRequestTests { @Test // gh-726 void invalidBody() { - testInvalidBody(Map.of()); - testInvalidBody(Map.of("query", Collections.emptyMap())); - testInvalidBody(Map.of("query", "query { foo }", "operation", Collections.emptyMap())); - testInvalidBody(Map.of("query", "query { foo }", "variables", "not-a-map")); - testInvalidBody(Map.of("query", "query { foo }", "extensions", "not-a-map")); + testInvalidBody(new HashMap<>()); + Map empty = new HashMap<>(); + empty.put("query", Collections.emptyMap()); + testInvalidBody(empty); + Map emptyOperations = new HashMap<>(); + emptyOperations.put("query", "query { foo }"); + emptyOperations.put("operation", Collections.emptyMap()); + testInvalidBody(emptyOperations); + Map invalidVariables = new HashMap<>(); + invalidVariables.put("query", "query { foo }"); + invalidVariables.put("variables", "not-a-map"); + testInvalidBody(invalidVariables); + Map invalidExtensions = new HashMap<>(); + invalidExtensions.put("query", "query { foo }"); + invalidExtensions.put("extensions", "not-a-map"); + testInvalidBody(invalidExtensions); } private void testInvalidBody(Map body) { assertThatThrownBy(() -> new WebGraphQlRequest( - URI.create("/graphql"), new HttpHeaders(), new LinkedMultiValueMap<>(), - Collections.emptyMap(), body, "1", null)) + URI.create("/graphql"), new HttpHeaders(), body, "1", null)) .isInstanceOf(ServerWebInputException.class); }