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