From bf0629522ca3f33222b454dfa020f75eac1a2d09 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 20 Nov 2014 17:21:25 -0800 Subject: [PATCH] Only use Gson if Jackson is missing Update HttpMessageConvertersAutoConfiguration to only register Gson support when Jackson is not on the classpath. Fixes gh-1967 --- .../web/HttpMessageConvertersAutoConfiguration.java | 2 ++ .../HttpMessageConvertersAutoConfigurationTests.java | 11 ++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java index aa924f63199..aab9c2913d5 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java @@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -113,6 +114,7 @@ public class HttpMessageConvertersAutoConfiguration { @Configuration @ConditionalOnClass(Gson.class) + @ConditionalOnMissingClass(name = "com.fasterxml.jackson.core.JsonGenerator") @ConditionalOnBean(Gson.class) protected static class GsonHttpMessageConverterConfiguration { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java index 8c9ec03593d..12efcdb4793 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java @@ -121,10 +121,9 @@ public class HttpMessageConvertersAutoConfigurationTests { this.context.register(GsonConfig.class, HttpMessageConvertersAutoConfiguration.class); this.context.refresh(); - assertConverterBeanExists(GsonHttpMessageConverter.class, - "gsonHttpMessageConverter"); - - assertConverterBeanRegisteredWithHttpMessageConverters(GsonHttpMessageConverter.class); + // Shouldn't be registered because we have Jackson + assertEquals(0, this.context.getBeansOfType(GsonHttpMessageConverter.class) + .size()); } @Test @@ -165,8 +164,7 @@ public class HttpMessageConvertersAutoConfigurationTests { this.context.refresh(); MappingJackson2HttpMessageConverter converter = this.context .getBean(MappingJackson2HttpMessageConverter.class); - assertNull(new DirectFieldAccessor(converter) - .getPropertyValue("prettyPrint")); + assertNull(new DirectFieldAccessor(converter).getPropertyValue("prettyPrint")); } @Test @@ -189,7 +187,6 @@ public class HttpMessageConvertersAutoConfigurationTests { } private void assertConverterBeanRegisteredWithHttpMessageConverters(Class type) { - Object converter = this.context.getBean(type); HttpMessageConverters converters = this.context .getBean(HttpMessageConverters.class);