diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt index a616e47e9..48dcea7eb 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt @@ -31,12 +31,15 @@ import com.netflix.graphql.dgs.webflux.handlers.DgsWebfluxHttpHandler import com.netflix.graphql.dgs.webflux.handlers.WebFluxCookieValueResolver import graphql.ExecutionInput import graphql.GraphQL -import graphql.execution.* +import graphql.execution.AsyncExecutionStrategy +import graphql.execution.AsyncSerialExecutionStrategy +import graphql.execution.DataFetcherExceptionHandler +import graphql.execution.ExecutionIdProvider +import graphql.execution.ExecutionStrategy import graphql.execution.instrumentation.ChainedInstrumentation import graphql.introspection.IntrospectionQuery import graphql.schema.GraphQLSchema import org.springframework.beans.factory.annotation.Qualifier -import org.springframework.beans.factory.annotation.Value import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.boot.context.properties.EnableConfigurationProperties @@ -44,7 +47,6 @@ import org.springframework.context.ApplicationContext import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.core.env.Environment -import org.springframework.core.io.Resource import org.springframework.http.MediaType import org.springframework.web.reactive.function.server.RequestPredicates.accept import org.springframework.web.reactive.function.server.RouterFunction @@ -113,14 +115,11 @@ open class DgsWebFluxAutoConfiguration(private val configProps: DgsWebfluxConfig @Bean @ConditionalOnProperty(name = ["dgs.graphql.graphiql.enabled"], havingValue = "true", matchIfMissing = true) - open fun graphiQlIndexRedirect(@Value("classpath:/static/graphiql/index.html") indexHtml: Resource): RouterFunction { + open fun graphiQlIndexRedirect(): RouterFunction { return RouterFunctions.route() .GET(configProps.graphiql.path) { permanentRedirect(URI.create(configProps.graphiql.path + "/index.html")).build() } - .GET(configProps.graphiql.path + "/index.html") { - ok().bodyValue(indexHtml) - } .build() } diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt index 592d5f995..e54f25a95 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt @@ -33,7 +33,7 @@ class GraphiQlConfigurer(private val configProps: DgsWebfluxConfigurationPropert override fun addResourceHandlers(registry: ResourceHandlerRegistry) { val graphqlPath = configProps.path registry - .addResourceHandler("/graphiql/**") + .addResourceHandler(configProps.graphiql.path + "/**") .addResourceLocations("classpath:/static/graphiql/") .resourceChain(true) .addResolver(PathResourceResolver()) @@ -53,7 +53,7 @@ class GraphiQlConfigurer(private val configProps: DgsWebfluxConfigurationPropert resource: Resource, transformerChain: ResourceTransformerChain ): Mono { - if (exchange.request.uri.toASCIIString().endsWith("graphiql/index.html")) { + if (exchange.request.uri.toASCIIString().endsWith(configProps.graphiql.path + "/index.html")) { val content = resource.inputStream.bufferedReader().use(BufferedReader::readText) return Mono.just( TransformedResource( diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt b/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt index eafdeef51..259bfb73a 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt @@ -17,11 +17,13 @@ package com.netflix.graphql.dgs.webflux.autoconfiguration import com.netflix.graphql.dgs.autoconfig.DgsAutoConfiguration +import graphql.Assert import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.web.reactive.server.WebTestClient +import org.springframework.test.web.reactive.server.expectBody import org.springframework.web.reactive.config.EnableWebFlux @AutoConfigureWebTestClient @@ -48,5 +50,7 @@ class GraphiQlCustomEndpoint { .exchange() .expectStatus() .is2xxSuccessful + .expectBody() + .consumeWith { it -> Assert.assertTrue(it.responseBody!!.contains("fetch('/graphql")) } } }