Skip to content

Commit dc23ca5

Browse files
committed
Merge branch '4.0.x'
Closes gh-50914
2 parents fb9794a + d2b538b commit dc23ca5

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

module/spring-boot-graphql/src/main/java/org/springframework/boot/graphql/autoconfigure/servlet/GraphQlWebMvcAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ GraphQlWebSocketHandler graphQlWebSocketHandler(WebGraphQlHandler webGraphQlHand
203203
private HttpMessageConverter<Object> getJsonConverter(
204204
ObjectProvider<ServerHttpMessageConvertersCustomizer> customizers) {
205205
ServerBuilder serverBuilder = HttpMessageConverters.forServer().registerDefaults();
206-
customizers.forEach((customizer) -> customizer.customize(serverBuilder));
206+
customizers.orderedStream().forEach((customizer) -> customizer.customize(serverBuilder));
207207
for (HttpMessageConverter<?> converter : serverBuilder.build()) {
208208
if (canReadJsonMap(converter)) {
209209
return asObjectHttpMessageConverter(converter);

module/spring-boot-graphql/src/test/java/org/springframework/boot/graphql/autoconfigure/servlet/GraphQlWebMvcAutoConfigurationTests.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
import org.assertj.core.api.InstanceOfAssertFactories;
2525
import org.assertj.core.api.ThrowingConsumer;
2626
import org.junit.jupiter.api.Test;
27+
import org.mockito.InOrder;
2728

2829
import org.springframework.aot.hint.RuntimeHints;
2930
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
3031
import org.springframework.boot.autoconfigure.AutoConfigurations;
3132
import org.springframework.boot.graphql.autoconfigure.GraphQlAutoConfiguration;
3233
import org.springframework.boot.graphql.autoconfigure.GraphQlTestDataFetchers;
3334
import org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration;
35+
import org.springframework.boot.http.converter.autoconfigure.ServerHttpMessageConvertersCustomizer;
3436
import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration;
3537
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
3638
import org.springframework.boot.testsupport.classpath.resources.WithResource;
@@ -56,6 +58,9 @@
5658
import org.springframework.web.socket.server.support.WebSocketHandlerMapping;
5759

5860
import static org.assertj.core.api.Assertions.assertThat;
61+
import static org.mockito.ArgumentMatchers.any;
62+
import static org.mockito.Mockito.inOrder;
63+
import static org.mockito.Mockito.mock;
5964
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
6065

6166
/**
@@ -240,6 +245,22 @@ void shouldConfigureWebSocketBeans() {
240245
});
241246
}
242247

248+
@Test
249+
void shouldApplyJsonCustomizersInOrderB() {
250+
this.contextRunner.withPropertyValues("spring.graphql.websocket.path=/ws")
251+
.withUserConfiguration(CustomJsonConverterConfiguration.class)
252+
.run((context) -> {
253+
assertThat(context).hasSingleBean(GraphQlWebSocketHandler.class);
254+
ServerHttpMessageConvertersCustomizer before = context.getBean("before",
255+
ServerHttpMessageConvertersCustomizer.class);
256+
ServerHttpMessageConvertersCustomizer after = context.getBean("after",
257+
ServerHttpMessageConvertersCustomizer.class);
258+
InOrder ordered = inOrder(before, after);
259+
ordered.verify(before).customize(any());
260+
ordered.verify(after).customize(any());
261+
});
262+
}
263+
243264
@Test
244265
void shouldConfigureWebSocketProperties() {
245266
this.contextRunner
@@ -314,6 +335,23 @@ WebGraphQlInterceptor customWebGraphQlInterceptor() {
314335

315336
}
316337

338+
@Configuration(proxyBeanMethods = false)
339+
static class CustomJsonConverterConfiguration {
340+
341+
@Bean
342+
@Order(1)
343+
ServerHttpMessageConvertersCustomizer after() {
344+
return mock();
345+
}
346+
347+
@Bean
348+
@Order(-1)
349+
ServerHttpMessageConvertersCustomizer before() {
350+
return mock();
351+
}
352+
353+
}
354+
317355
@Configuration
318356
static class CustomRouterFunctions {
319357

0 commit comments

Comments
 (0)