diff --git a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java index 21263cdc..b973fee4 100644 --- a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java +++ b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java @@ -36,6 +36,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.graphql.data.method.annotation.support.AnnotatedDataFetcherConfigurer; import org.springframework.graphql.execution.DataFetcherExceptionResolver; import org.springframework.graphql.execution.GraphQlSource; import org.springframework.graphql.execution.MissingSchemaException; @@ -56,12 +57,17 @@ public class GraphQlAutoConfiguration { private static final Log logger = LogFactory.getLog(GraphQlAutoConfiguration.class); + @Bean + public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer() { + return new AnnotatedDataFetcherConfigurer(); + } + @Bean public GraphQlSource graphQlSource(ResourcePatternResolver resourcePatternResolver, GraphQlProperties properties, ObjectProvider exceptionResolversProvider, ObjectProvider instrumentationsProvider, ObjectProvider sourceCustomizers, - ObjectProvider wiringConfigurers) throws IOException { + ObjectProvider wiringConfigurers) { List schemaResources = resolveSchemaResources(resourcePatternResolver, properties.getSchema().getLocations(), properties.getSchema().getFileExtensions()); diff --git a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebFluxAutoConfiguration.java b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebFluxAutoConfiguration.java index 5bcc9629..349d6a20 100644 --- a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebFluxAutoConfiguration.java +++ b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebFluxAutoConfiguration.java @@ -36,7 +36,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.graphql.GraphQlService; -import org.springframework.graphql.data.method.annotation.support.AnnotatedDataFetcherConfigurer; import org.springframework.graphql.execution.GraphQlSource; import org.springframework.graphql.web.WebGraphQlHandler; import org.springframework.graphql.web.WebInterceptor; @@ -74,13 +73,6 @@ public class GraphQlWebFluxAutoConfiguration { private static final Log logger = LogFactory.getLog(GraphQlWebFluxAutoConfiguration.class); - @Bean - public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer(ServerCodecConfigurer configurer) { - AnnotatedDataFetcherConfigurer dataFetcherConfigurer = new AnnotatedDataFetcherConfigurer(); - dataFetcherConfigurer.setServerCodecConfigurer(configurer); - return dataFetcherConfigurer; - } - @Bean @ConditionalOnBean(GraphQlService.class) @ConditionalOnMissingBean diff --git a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebMvcAutoConfiguration.java b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebMvcAutoConfiguration.java index 739fbd18..598f3024 100644 --- a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebMvcAutoConfiguration.java +++ b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebMvcAutoConfiguration.java @@ -40,7 +40,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.graphql.GraphQlService; -import org.springframework.graphql.data.method.annotation.support.AnnotatedDataFetcherConfigurer; import org.springframework.graphql.execution.GraphQlSource; import org.springframework.graphql.execution.ThreadLocalAccessor; import org.springframework.graphql.web.WebGraphQlHandler; @@ -82,22 +81,6 @@ public class GraphQlWebMvcAutoConfiguration { private static final Log logger = LogFactory.getLog(GraphQlWebMvcAutoConfiguration.class); - @Bean - public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer(HttpMessageConverters converters) { - AnnotatedDataFetcherConfigurer dataFetcherConfigurer = new AnnotatedDataFetcherConfigurer(); - dataFetcherConfigurer.setJsonMessageConverter(getJsonConverter(converters)); - return dataFetcherConfigurer; - } - - @SuppressWarnings("unchecked") - private static GenericHttpMessageConverter getJsonConverter(HttpMessageConverters converters) { - return converters.getConverters().stream() - .filter((candidate) -> candidate.canRead(Map.class, MediaType.APPLICATION_JSON)) - .findFirst() - .map(converter -> (GenericHttpMessageConverter) converter) - .orElseThrow(() -> new IllegalStateException("No JSON converter")); - } - @Bean @ConditionalOnBean(GraphQlService.class) @ConditionalOnMissingBean @@ -160,6 +143,15 @@ public class GraphQlWebMvcAutoConfiguration { properties.getWebsocket().getConnectionInitTimeout()); } + @SuppressWarnings("unchecked") + private static GenericHttpMessageConverter getJsonConverter(HttpMessageConverters converters) { + return converters.getConverters().stream() + .filter((candidate) -> candidate.canRead(Map.class, MediaType.APPLICATION_JSON)) + .findFirst() + .map(converter -> (GenericHttpMessageConverter) converter) + .orElseThrow(() -> new IllegalStateException("No JSON converter")); + } + @Bean public HandlerMapping graphQlWebSocketMapping(GraphQlWebSocketHandler handler, GraphQlProperties properties) { String path = properties.getWebsocket().getPath(); diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java index acb3757e..de56e783 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java @@ -40,8 +40,6 @@ import org.springframework.core.MethodParameter; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ResolvableType; import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.core.codec.Decoder; -import org.springframework.core.codec.Encoder; import org.springframework.graphql.data.method.HandlerMethod; import org.springframework.graphql.data.method.HandlerMethodArgumentResolver; import org.springframework.graphql.data.method.HandlerMethodArgumentResolverComposite; @@ -50,11 +48,6 @@ import org.springframework.graphql.data.method.annotation.QueryMapping; import org.springframework.graphql.data.method.annotation.SchemaMapping; import org.springframework.graphql.data.method.annotation.SubscriptionMapping; import org.springframework.graphql.execution.RuntimeWiringConfigurer; -import org.springframework.http.MediaType; -import org.springframework.http.codec.DecoderHttpMessageReader; -import org.springframework.http.codec.EncoderHttpMessageWriter; -import org.springframework.http.codec.ServerCodecConfigurer; -import org.springframework.http.converter.GenericHttpMessageConverter; import org.springframework.lang.Nullable; import org.springframework.stereotype.Controller; import org.springframework.util.Assert; @@ -97,58 +90,6 @@ public class AnnotatedDataFetcherConfigurer @Nullable private HandlerMethodArgumentResolverComposite argumentResolvers; - @Nullable - private GenericHttpMessageConverter jsonMessageConverter; - - @Nullable - private Encoder jsonEncoder; - - @Nullable - private Decoder jsonDecoder; - - - /** - * Configure the {@link org.springframework.http.converter.HttpMessageConverter} - * to use to convert input arguments obtained from the - * {@link DataFetchingEnvironment} and converted to the type of a declared - * {@link org.springframework.graphql.data.method.annotation.Argument @Argument} - * method parameter. - *

This method is mutually exclusive with - * {@link #setServerCodecConfigurer(ServerCodecConfigurer)} and is convenient - * for use in a Spring MVC application but both variant can be used without - * much difference. - * @param converter the converter to use. - */ - public void setJsonMessageConverter(@Nullable GenericHttpMessageConverter converter) { - this.jsonMessageConverter = converter; - } - - /** - * Variant of {@link #setJsonMessageConverter(GenericHttpMessageConverter)} - * to use an {@link Encoder} and {@link Decoder} to convert input arguments. - *

This method is mutually exclusive with - * {@link #setJsonMessageConverter(GenericHttpMessageConverter)} and is - * convenient for use in a Spring WebFlux application but both variant can - * be used without much difference. - */ - @SuppressWarnings("unchecked") - public void setServerCodecConfigurer(@Nullable ServerCodecConfigurer configurer) { - if (configurer == null) { - this.jsonDecoder = null; - this.jsonEncoder = null; - return; - } - this.jsonDecoder = configurer.getReaders().stream() - .filter((reader) -> reader.canRead(MAP_RESOLVABLE_TYPE, MediaType.APPLICATION_JSON)) - .map((reader) -> ((DecoderHttpMessageReader) reader).getDecoder()) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("No Decoder for JSON")); - this.jsonEncoder = configurer.getWriters().stream() - .filter((writer) -> writer.canWrite(MAP_RESOLVABLE_TYPE, MediaType.APPLICATION_JSON)) - .map((writer) -> ((EncoderHttpMessageWriter) writer).getEncoder()) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("No Encoder for JSON")); - } @Override public void setApplicationContext(ApplicationContext applicationContext) { diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherDetectionTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherDetectionTests.java index 7a7882ff..e0d3f14d 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherDetectionTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherDetectionTests.java @@ -31,7 +31,6 @@ import org.springframework.graphql.data.method.annotation.MutationMapping; import org.springframework.graphql.data.method.annotation.QueryMapping; import org.springframework.graphql.data.method.annotation.SchemaMapping; import org.springframework.graphql.data.method.annotation.SubscriptionMapping; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Controller; import static org.assertj.core.api.Assertions.assertThat; @@ -84,7 +83,6 @@ public class AnnotatedDataFetcherDetectionTests { appContext.refresh(); AnnotatedDataFetcherConfigurer configurer = new AnnotatedDataFetcherConfigurer(); - configurer.setJsonMessageConverter(new MappingJackson2HttpMessageConverter()); configurer.setApplicationContext(appContext); configurer.afterPropertiesSet(); diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherInvocationTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherInvocationTests.java index b58c8114..334f6861 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherInvocationTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherInvocationTests.java @@ -48,7 +48,6 @@ import org.springframework.graphql.execution.BatchLoaderRegistry; import org.springframework.graphql.execution.DefaultBatchLoaderRegistry; import org.springframework.graphql.execution.ExecutionGraphQlService; import org.springframework.graphql.execution.GraphQlSource; -import org.springframework.http.codec.ServerCodecConfigurer; import org.springframework.stereotype.Controller; import static org.assertj.core.api.Assertions.assertThat; @@ -243,9 +242,7 @@ public class AnnotatedDataFetcherInvocationTests { @Bean public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer() { - AnnotatedDataFetcherConfigurer registrar = new AnnotatedDataFetcherConfigurer(); - registrar.setServerCodecConfigurer(ServerCodecConfigurer.create()); - return registrar; + return new AnnotatedDataFetcherConfigurer(); } @Bean