diff --git a/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandler.java b/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandler.java index fb7c630d0..518b85a44 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandler.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandler.java @@ -17,6 +17,7 @@ package org.springframework.graphql.server.webmvc; import java.io.IOException; +import java.time.Duration; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -106,7 +107,12 @@ public ServerResponse handleRequest(ServerRequest serverRequest) throws ServletE builder.headers(headers -> headers.putAll(response.getResponseHeaders())); builder.contentType(selectResponseMediaType(serverRequest)); return builder.body(response.toMap()); - }); + }) + .cache(); + + try { + return responseMono.block(Duration.ZERO); + } catch (IllegalStateException ignored) {} return ServerResponse.async(responseMono); } @@ -138,5 +144,4 @@ private static MediaType selectResponseMediaType(ServerRequest serverRequest) { } return MediaType.APPLICATION_JSON; } - } diff --git a/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandlerTests.java b/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandlerTests.java index 19ee887ed..79c0b3893 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandlerTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlHttpHandlerTests.java @@ -122,7 +122,10 @@ private MockHttpServletResponse handleRequest( MockHttpServletRequest servletRequest, GraphQlHttpHandler handler) throws ServletException, IOException { ServerRequest request = ServerRequest.create(servletRequest, MESSAGE_READERS); - ServerResponse response = ((AsyncServerResponse) handler.handleRequest(request)).block(); + ServerResponse response = handler.handleRequest(request); + if (response instanceof AsyncServerResponse asyncServerResponse) { + asyncServerResponse.block(); + } MockHttpServletResponse servletResponse = new MockHttpServletResponse(); response.writeTo(servletRequest, servletResponse, new DefaultContext());