diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml index 79a2ed601f..0ac2b26e3c 100644 --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -26,6 +26,11 @@ jackson-databind true + + com.fasterxml.jackson.datatype + jackson-datatype-joda + true + commons-dbcp commons-dbcp 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 fe0a47e11b..b38320aaea 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 @@ -23,11 +23,11 @@ import java.util.List; import javax.annotation.PostConstruct; +import org.joda.time.DateTime; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.annotation.Autowired; 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.context.annotation.Bean; @@ -38,6 +38,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.joda.JodaModule; /** * {@link EnableAutoConfiguration Auto-configuration} for {@link HttpMessageConverter}s. @@ -60,7 +61,17 @@ public class HttpMessageConvertersAutoConfiguration { } @Configuration - @ConditionalOnBean(ObjectMapper.class) + @ConditionalOnClass({ JodaModule.class, DateTime.class }) + protected static class JodaModuleConfiguration { + + @Bean + public JodaModule jodaModule() { + return new JodaModule(); + } + + } + + @Configuration @ConditionalOnClass(ObjectMapper.class) protected static class ObjectMappers { 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 46af4b2f95..ffd7f35ff8 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 @@ -37,6 +37,7 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import static org.hamcrest.Matchers.hasItem; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.argThat; import static org.mockito.Mockito.verify; @@ -72,6 +73,14 @@ public class HttpMessageConvertersAutoConfigurationTests { assertTrue(converters.getConverters().contains(converter)); } + @Test + public void defaultJacksonModules() throws Exception { + this.context = new AnnotationConfigApplicationContext(); + this.context.register(HttpMessageConvertersAutoConfiguration.class); + this.context.refresh(); + assertNotNull(this.context.getBean("jodaModule", Module.class)); + } + @Test public void customJacksonModules() throws Exception { this.context = new AnnotationConfigApplicationContext(); @@ -82,7 +91,8 @@ public class HttpMessageConvertersAutoConfigurationTests { @SuppressWarnings({ "unchecked", "unused" }) ObjectMapper result = verify(mapper).registerModules( - (Iterable) argThat(hasItem(this.context.getBean(Module.class)))); + (Iterable) argThat(hasItem(this.context.getBean("jacksonModule", + Module.class)))); } @Test