From 5e4a74562066b77ef37ed0b9ed0fc1533ad93b9b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 19 May 2015 16:46:03 +0100 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20register=20Jackson=20Module=20b?= =?UTF-8?q?eans=20with=20all=20ObjectMappers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, JacksonAutoConfiguration would register any Jackson Module beans with every ObjectMapper found in the application context. This was not consistent with the rest of the Jackson auto-configuration, which is only applied to ObjectMappers that are created or configured via the auto-configured Jackson2ObjectMapperBuilder. This commit removes the code that registers Jackson Module beans with every ObjectMapper. Such beans will still be registered with ObjectMappers created or configured using the auto-configured Jackson2ObjectMapperBuilder. This aligns the configuration of Module with the rest of the ObjectMapper configuration and makes it possible for users to create an ObjectMapper bean and still have complete control over the modules that are registered with it. Closes gh-2489 --- .../jackson/JacksonAutoConfiguration.java | 21 ++++++------------- .../JacksonAutoConfigurationTests.java | 14 ------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java index 51b03c85a6..899d8ec644 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java @@ -23,8 +23,6 @@ import java.util.Collection; import java.util.Map; import java.util.Map.Entry; -import javax.annotation.PostConstruct; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; @@ -75,19 +73,6 @@ public class JacksonAutoConfiguration { @Autowired private ListableBeanFactory beanFactory; - @PostConstruct - private void registerModulesWithObjectMappers() { - Collection modules = getBeans(this.beanFactory, Module.class); - for (ObjectMapper objectMapper : getBeans(this.beanFactory, ObjectMapper.class)) { - objectMapper.registerModules(modules); - } - } - - private static Collection getBeans(ListableBeanFactory beanFactory, - Class type) { - return BeanFactoryUtils.beansOfTypeIncludingAncestors(beanFactory, type).values(); - } - @Configuration @ConditionalOnClass({ ObjectMapper.class, Jackson2ObjectMapperBuilder.class }) static class JacksonObjectMapperConfiguration { @@ -249,6 +234,12 @@ public class JacksonAutoConfiguration { builder.modulesToInstall(moduleBeans.toArray(new Module[moduleBeans.size()])); } + private static Collection getBeans(ListableBeanFactory beanFactory, + Class type) { + return BeanFactoryUtils.beansOfTypeIncludingAncestors(beanFactory, type) + .values(); + } + @Override public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java index c5d3e935f4..4b4ff7e953 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java @@ -62,9 +62,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.argThat; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; /** * Tests for {@link JacksonAutoConfiguration}. @@ -99,18 +97,6 @@ public class JacksonAutoConfigurationTests { assertThat(objectMapper.canSerialize(LocalDateTime.class), is(true)); } - @Test - public void customJacksonModules() throws Exception { - this.context.register(ModuleConfig.class, MockObjectMapperConfig.class, - JacksonAutoConfiguration.class); - this.context.refresh(); - ObjectMapper mapper = this.context.getBean(ObjectMapper.class); - @SuppressWarnings({ "unchecked", "unused" }) - ObjectMapper result = verify(mapper).registerModules( - (Iterable) argThat(hasItem(this.context.getBean("jacksonModule", - Module.class)))); - } - @Test public void doubleModuleRegistration() throws Exception { this.context.register(DoubleModulesConfig.class,