Commit bf062952 authored by Phillip Webb's avatar Phillip Webb

Only use Gson if Jackson is missing

Update HttpMessageConvertersAutoConfiguration to only register Gson
support when Jackson is not on the classpath.

Fixes gh-1967
parent 2b57c5a4
...@@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; ...@@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
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.ConditionalOnMissingClass;
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.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -113,6 +114,7 @@ public class HttpMessageConvertersAutoConfiguration { ...@@ -113,6 +114,7 @@ public class HttpMessageConvertersAutoConfiguration {
@Configuration @Configuration
@ConditionalOnClass(Gson.class) @ConditionalOnClass(Gson.class)
@ConditionalOnMissingClass(name = "com.fasterxml.jackson.core.JsonGenerator")
@ConditionalOnBean(Gson.class) @ConditionalOnBean(Gson.class)
protected static class GsonHttpMessageConverterConfiguration { protected static class GsonHttpMessageConverterConfiguration {
......
...@@ -121,10 +121,9 @@ public class HttpMessageConvertersAutoConfigurationTests { ...@@ -121,10 +121,9 @@ public class HttpMessageConvertersAutoConfigurationTests {
this.context.register(GsonConfig.class, this.context.register(GsonConfig.class,
HttpMessageConvertersAutoConfiguration.class); HttpMessageConvertersAutoConfiguration.class);
this.context.refresh(); this.context.refresh();
assertConverterBeanExists(GsonHttpMessageConverter.class, // Shouldn't be registered because we have Jackson
"gsonHttpMessageConverter"); assertEquals(0, this.context.getBeansOfType(GsonHttpMessageConverter.class)
.size());
assertConverterBeanRegisteredWithHttpMessageConverters(GsonHttpMessageConverter.class);
} }
@Test @Test
...@@ -165,8 +164,7 @@ public class HttpMessageConvertersAutoConfigurationTests { ...@@ -165,8 +164,7 @@ public class HttpMessageConvertersAutoConfigurationTests {
this.context.refresh(); this.context.refresh();
MappingJackson2HttpMessageConverter converter = this.context MappingJackson2HttpMessageConverter converter = this.context
.getBean(MappingJackson2HttpMessageConverter.class); .getBean(MappingJackson2HttpMessageConverter.class);
assertNull(new DirectFieldAccessor(converter) assertNull(new DirectFieldAccessor(converter).getPropertyValue("prettyPrint"));
.getPropertyValue("prettyPrint"));
} }
@Test @Test
...@@ -189,7 +187,6 @@ public class HttpMessageConvertersAutoConfigurationTests { ...@@ -189,7 +187,6 @@ public class HttpMessageConvertersAutoConfigurationTests {
} }
private void assertConverterBeanRegisteredWithHttpMessageConverters(Class<?> type) { private void assertConverterBeanRegisteredWithHttpMessageConverters(Class<?> type) {
Object converter = this.context.getBean(type); Object converter = this.context.getBean(type);
HttpMessageConverters converters = this.context HttpMessageConverters converters = this.context
.getBean(HttpMessageConverters.class); .getBean(HttpMessageConverters.class);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment