Do not auto-configure HttpMessageConverters in reactive web apps
Closes gh-15712
This commit is contained in:
parent
6abd18ae96
commit
530c7bee71
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2018 the original author or authors.
|
* Copyright 2012-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -24,11 +24,16 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.NoneNestedConditions;
|
||||||
import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration;
|
import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition;
|
||||||
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.http.converter.HttpMessageConverter;
|
||||||
|
@ -49,6 +54,7 @@ import org.springframework.http.converter.StringHttpMessageConverter;
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnClass(HttpMessageConverter.class)
|
@ConditionalOnClass(HttpMessageConverter.class)
|
||||||
|
@Conditional(NotReactiveWebApplicationCondition.class)
|
||||||
@AutoConfigureAfter({ GsonAutoConfiguration.class, JacksonAutoConfiguration.class,
|
@AutoConfigureAfter({ GsonAutoConfiguration.class, JacksonAutoConfiguration.class,
|
||||||
JsonbAutoConfiguration.class })
|
JsonbAutoConfiguration.class })
|
||||||
@Import({ JacksonHttpMessageConvertersConfiguration.class,
|
@Import({ JacksonHttpMessageConvertersConfiguration.class,
|
||||||
|
@ -93,4 +99,17 @@ public class HttpMessageConvertersAutoConfiguration {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class NotReactiveWebApplicationCondition extends NoneNestedConditions {
|
||||||
|
|
||||||
|
NotReactiveWebApplicationCondition() {
|
||||||
|
super(ConfigurationPhase.PARSE_CONFIGURATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConditionalOnWebApplication(type = Type.REACTIVE)
|
||||||
|
private static class ReactiveWebApplication {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2018 the original author or authors.
|
* Copyright 2012-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -32,6 +32,8 @@ import org.springframework.boot.test.context.FilteredClassLoader;
|
||||||
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
|
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
|
||||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||||
import org.springframework.boot.test.context.runner.ContextConsumer;
|
import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||||
|
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||||
|
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.support.GenericApplicationContext;
|
import org.springframework.context.support.GenericApplicationContext;
|
||||||
|
@ -257,6 +259,24 @@ public class HttpMessageConvertersAutoConfigurationTests {
|
||||||
"jsonbHttpMessageConverter"));
|
"jsonbHttpMessageConverter"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenServletWebApplicationHttpMessageConvertersIsConfigured() {
|
||||||
|
new WebApplicationContextRunner()
|
||||||
|
.withConfiguration(AutoConfigurations
|
||||||
|
.of(HttpMessageConvertersAutoConfiguration.class))
|
||||||
|
.run((context) -> assertThat(context)
|
||||||
|
.hasSingleBean(HttpMessageConverters.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenReactiveWebApplicationHttpMessageConvertersRestTemplateIsNotConfigured() {
|
||||||
|
new ReactiveWebApplicationContextRunner()
|
||||||
|
.withConfiguration(AutoConfigurations
|
||||||
|
.of(HttpMessageConvertersAutoConfiguration.class))
|
||||||
|
.run((context) -> assertThat(context)
|
||||||
|
.doesNotHaveBean(HttpMessageConverters.class));
|
||||||
|
}
|
||||||
|
|
||||||
private ApplicationContextRunner allOptionsRunner() {
|
private ApplicationContextRunner allOptionsRunner() {
|
||||||
return this.contextRunner
|
return this.contextRunner
|
||||||
.withConfiguration(AutoConfigurations.of(GsonAutoConfiguration.class,
|
.withConfiguration(AutoConfigurations.of(GsonAutoConfiguration.class,
|
||||||
|
|
Loading…
Reference in New Issue