Skip to content

Commit ea37c3b

Browse files
committed
Simplify AnnotatedDataFetcherConfigurer config
Now that we don't use JSON conversion for input arguments, we can declare AnnotatedDataFetcherConfigurer in shared config. See gh-122
1 parent 02b16bd commit ea37c3b

File tree

6 files changed

+17
-91
lines changed

6 files changed

+17
-91
lines changed

graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springframework.context.annotation.Configuration;
3737
import org.springframework.core.io.Resource;
3838
import org.springframework.core.io.support.ResourcePatternResolver;
39+
import org.springframework.graphql.data.method.annotation.support.AnnotatedDataFetcherConfigurer;
3940
import org.springframework.graphql.execution.DataFetcherExceptionResolver;
4041
import org.springframework.graphql.execution.GraphQlSource;
4142
import org.springframework.graphql.execution.MissingSchemaException;
@@ -56,12 +57,17 @@ public class GraphQlAutoConfiguration {
5657

5758
private static final Log logger = LogFactory.getLog(GraphQlAutoConfiguration.class);
5859

60+
@Bean
61+
public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer() {
62+
return new AnnotatedDataFetcherConfigurer();
63+
}
64+
5965
@Bean
6066
public GraphQlSource graphQlSource(ResourcePatternResolver resourcePatternResolver, GraphQlProperties properties,
6167
ObjectProvider<DataFetcherExceptionResolver> exceptionResolversProvider,
6268
ObjectProvider<Instrumentation> instrumentationsProvider,
6369
ObjectProvider<GraphQlSourceBuilderCustomizer> sourceCustomizers,
64-
ObjectProvider<RuntimeWiringConfigurer> wiringConfigurers) throws IOException {
70+
ObjectProvider<RuntimeWiringConfigurer> wiringConfigurers) {
6571

6672
List<Resource> schemaResources = resolveSchemaResources(resourcePatternResolver, properties.getSchema().getLocations(),
6773
properties.getSchema().getFileExtensions());

graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebFluxAutoConfiguration.java

-8
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import org.springframework.core.io.Resource;
3737
import org.springframework.core.io.ResourceLoader;
3838
import org.springframework.graphql.GraphQlService;
39-
import org.springframework.graphql.data.method.annotation.support.AnnotatedDataFetcherConfigurer;
4039
import org.springframework.graphql.execution.GraphQlSource;
4140
import org.springframework.graphql.web.WebGraphQlHandler;
4241
import org.springframework.graphql.web.WebInterceptor;
@@ -74,13 +73,6 @@ public class GraphQlWebFluxAutoConfiguration {
7473

7574
private static final Log logger = LogFactory.getLog(GraphQlWebFluxAutoConfiguration.class);
7675

77-
@Bean
78-
public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer(ServerCodecConfigurer configurer) {
79-
AnnotatedDataFetcherConfigurer dataFetcherConfigurer = new AnnotatedDataFetcherConfigurer();
80-
dataFetcherConfigurer.setServerCodecConfigurer(configurer);
81-
return dataFetcherConfigurer;
82-
}
83-
8476
@Bean
8577
@ConditionalOnBean(GraphQlService.class)
8678
@ConditionalOnMissingBean

graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlWebMvcAutoConfiguration.java

+9-17
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.springframework.core.io.Resource;
4141
import org.springframework.core.io.ResourceLoader;
4242
import org.springframework.graphql.GraphQlService;
43-
import org.springframework.graphql.data.method.annotation.support.AnnotatedDataFetcherConfigurer;
4443
import org.springframework.graphql.execution.GraphQlSource;
4544
import org.springframework.graphql.execution.ThreadLocalAccessor;
4645
import org.springframework.graphql.web.WebGraphQlHandler;
@@ -82,22 +81,6 @@ public class GraphQlWebMvcAutoConfiguration {
8281
private static final Log logger = LogFactory.getLog(GraphQlWebMvcAutoConfiguration.class);
8382

8483

85-
@Bean
86-
public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer(HttpMessageConverters converters) {
87-
AnnotatedDataFetcherConfigurer dataFetcherConfigurer = new AnnotatedDataFetcherConfigurer();
88-
dataFetcherConfigurer.setJsonMessageConverter(getJsonConverter(converters));
89-
return dataFetcherConfigurer;
90-
}
91-
92-
@SuppressWarnings("unchecked")
93-
private static GenericHttpMessageConverter<Object> getJsonConverter(HttpMessageConverters converters) {
94-
return converters.getConverters().stream()
95-
.filter((candidate) -> candidate.canRead(Map.class, MediaType.APPLICATION_JSON))
96-
.findFirst()
97-
.map(converter -> (GenericHttpMessageConverter<Object>) converter)
98-
.orElseThrow(() -> new IllegalStateException("No JSON converter"));
99-
}
100-
10184
@Bean
10285
@ConditionalOnBean(GraphQlService.class)
10386
@ConditionalOnMissingBean
@@ -160,6 +143,15 @@ public GraphQlWebSocketHandler graphQlWebSocketHandler(WebGraphQlHandler webGrap
160143
properties.getWebsocket().getConnectionInitTimeout());
161144
}
162145

146+
@SuppressWarnings("unchecked")
147+
private static GenericHttpMessageConverter<Object> getJsonConverter(HttpMessageConverters converters) {
148+
return converters.getConverters().stream()
149+
.filter((candidate) -> candidate.canRead(Map.class, MediaType.APPLICATION_JSON))
150+
.findFirst()
151+
.map(converter -> (GenericHttpMessageConverter<Object>) converter)
152+
.orElseThrow(() -> new IllegalStateException("No JSON converter"));
153+
}
154+
163155
@Bean
164156
public HandlerMapping graphQlWebSocketMapping(GraphQlWebSocketHandler handler, GraphQlProperties properties) {
165157
String path = properties.getWebsocket().getPath();

spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java

-59
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
import org.springframework.core.ParameterizedTypeReference;
4141
import org.springframework.core.ResolvableType;
4242
import org.springframework.core.annotation.AnnotatedElementUtils;
43-
import org.springframework.core.codec.Decoder;
44-
import org.springframework.core.codec.Encoder;
4543
import org.springframework.graphql.data.method.HandlerMethod;
4644
import org.springframework.graphql.data.method.HandlerMethodArgumentResolver;
4745
import org.springframework.graphql.data.method.HandlerMethodArgumentResolverComposite;
@@ -50,11 +48,6 @@
5048
import org.springframework.graphql.data.method.annotation.SchemaMapping;
5149
import org.springframework.graphql.data.method.annotation.SubscriptionMapping;
5250
import org.springframework.graphql.execution.RuntimeWiringConfigurer;
53-
import org.springframework.http.MediaType;
54-
import org.springframework.http.codec.DecoderHttpMessageReader;
55-
import org.springframework.http.codec.EncoderHttpMessageWriter;
56-
import org.springframework.http.codec.ServerCodecConfigurer;
57-
import org.springframework.http.converter.GenericHttpMessageConverter;
5851
import org.springframework.lang.Nullable;
5952
import org.springframework.stereotype.Controller;
6053
import org.springframework.util.Assert;
@@ -97,58 +90,6 @@ public class AnnotatedDataFetcherConfigurer
9790
@Nullable
9891
private HandlerMethodArgumentResolverComposite argumentResolvers;
9992

100-
@Nullable
101-
private GenericHttpMessageConverter<Object> jsonMessageConverter;
102-
103-
@Nullable
104-
private Encoder<Object> jsonEncoder;
105-
106-
@Nullable
107-
private Decoder<Object> jsonDecoder;
108-
109-
110-
/**
111-
* Configure the {@link org.springframework.http.converter.HttpMessageConverter}
112-
* to use to convert input arguments obtained from the
113-
* {@link DataFetchingEnvironment} and converted to the type of a declared
114-
* {@link org.springframework.graphql.data.method.annotation.Argument @Argument}
115-
* method parameter.
116-
* <p>This method is mutually exclusive with
117-
* {@link #setServerCodecConfigurer(ServerCodecConfigurer)} and is convenient
118-
* for use in a Spring MVC application but both variant can be used without
119-
* much difference.
120-
* @param converter the converter to use.
121-
*/
122-
public void setJsonMessageConverter(@Nullable GenericHttpMessageConverter<Object> converter) {
123-
this.jsonMessageConverter = converter;
124-
}
125-
126-
/**
127-
* Variant of {@link #setJsonMessageConverter(GenericHttpMessageConverter)}
128-
* to use an {@link Encoder} and {@link Decoder} to convert input arguments.
129-
* <p>This method is mutually exclusive with
130-
* {@link #setJsonMessageConverter(GenericHttpMessageConverter)} and is
131-
* convenient for use in a Spring WebFlux application but both variant can
132-
* be used without much difference.
133-
*/
134-
@SuppressWarnings("unchecked")
135-
public void setServerCodecConfigurer(@Nullable ServerCodecConfigurer configurer) {
136-
if (configurer == null) {
137-
this.jsonDecoder = null;
138-
this.jsonEncoder = null;
139-
return;
140-
}
141-
this.jsonDecoder = configurer.getReaders().stream()
142-
.filter((reader) -> reader.canRead(MAP_RESOLVABLE_TYPE, MediaType.APPLICATION_JSON))
143-
.map((reader) -> ((DecoderHttpMessageReader<Object>) reader).getDecoder())
144-
.findFirst()
145-
.orElseThrow(() -> new IllegalArgumentException("No Decoder for JSON"));
146-
this.jsonEncoder = configurer.getWriters().stream()
147-
.filter((writer) -> writer.canWrite(MAP_RESOLVABLE_TYPE, MediaType.APPLICATION_JSON))
148-
.map((writer) -> ((EncoderHttpMessageWriter<Object>) writer).getEncoder())
149-
.findFirst()
150-
.orElseThrow(() -> new IllegalArgumentException("No Encoder for JSON"));
151-
}
15293

15394
@Override
15495
public void setApplicationContext(ApplicationContext applicationContext) {

spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherDetectionTests.java

-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.springframework.graphql.data.method.annotation.QueryMapping;
3232
import org.springframework.graphql.data.method.annotation.SchemaMapping;
3333
import org.springframework.graphql.data.method.annotation.SubscriptionMapping;
34-
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
3534
import org.springframework.stereotype.Controller;
3635

3736
import static org.assertj.core.api.Assertions.assertThat;
@@ -84,7 +83,6 @@ private RuntimeWiring.Builder initRuntimeWiringBuilder(Class<?> handlerType) {
8483
appContext.refresh();
8584

8685
AnnotatedDataFetcherConfigurer configurer = new AnnotatedDataFetcherConfigurer();
87-
configurer.setJsonMessageConverter(new MappingJackson2HttpMessageConverter());
8886
configurer.setApplicationContext(appContext);
8987
configurer.afterPropertiesSet();
9088

spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherInvocationTests.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import org.springframework.graphql.execution.DefaultBatchLoaderRegistry;
4949
import org.springframework.graphql.execution.ExecutionGraphQlService;
5050
import org.springframework.graphql.execution.GraphQlSource;
51-
import org.springframework.http.codec.ServerCodecConfigurer;
5251
import org.springframework.stereotype.Controller;
5352

5453
import static org.assertj.core.api.Assertions.assertThat;
@@ -243,9 +242,7 @@ public GraphQlSource graphQlSource() {
243242

244243
@Bean
245244
public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer() {
246-
AnnotatedDataFetcherConfigurer registrar = new AnnotatedDataFetcherConfigurer();
247-
registrar.setServerCodecConfigurer(ServerCodecConfigurer.create());
248-
return registrar;
245+
return new AnnotatedDataFetcherConfigurer();
249246
}
250247

251248
@Bean

0 commit comments

Comments
 (0)