Commit 27d9d7fd authored by Sebastien Deleuze's avatar Sebastien Deleuze Committed by Phillip Webb

Add support for autowired Jackson handlers

Inject the ApplicationContext into Jackson2ObjectMapperBuilder to allow
Jackson handlers to be autowired. See SPR-10768.

Fixes gh-2081
parent 4b7c6f61
...@@ -33,6 +33,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; ...@@ -33,6 +33,8 @@ 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.web.HttpMapperProperties; import org.springframework.boot.autoconfigure.web.HttpMapperProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
...@@ -98,7 +100,10 @@ public class JacksonAutoConfiguration { ...@@ -98,7 +100,10 @@ public class JacksonAutoConfiguration {
@Configuration @Configuration
@ConditionalOnClass({ ObjectMapper.class, Jackson2ObjectMapperBuilder.class }) @ConditionalOnClass({ ObjectMapper.class, Jackson2ObjectMapperBuilder.class })
@EnableConfigurationProperties({ HttpMapperProperties.class, JacksonProperties.class }) @EnableConfigurationProperties({ HttpMapperProperties.class, JacksonProperties.class })
static class JacksonObjectMapperBuilderAutoConfiguration { static class JacksonObjectMapperBuilderAutoConfiguration implements
ApplicationContextAware {
private ApplicationContext applicationContext;
@Autowired @Autowired
private JacksonProperties jacksonProperties; private JacksonProperties jacksonProperties;
...@@ -110,6 +115,7 @@ public class JacksonAutoConfiguration { ...@@ -110,6 +115,7 @@ public class JacksonAutoConfiguration {
@ConditionalOnMissingBean(Jackson2ObjectMapperBuilder.class) @ConditionalOnMissingBean(Jackson2ObjectMapperBuilder.class)
public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder() { public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.applicationContext(this.applicationContext);
Boolean isJsonSortKeys = this.httpMapperProperties.isJsonSortKeys(); Boolean isJsonSortKeys = this.httpMapperProperties.isJsonSortKeys();
if (isJsonSortKeys != null && isJsonSortKeys) { if (isJsonSortKeys != null && isJsonSortKeys) {
builder.featuresToEnable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS); builder.featuresToEnable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
...@@ -194,6 +200,10 @@ public class JacksonAutoConfiguration { ...@@ -194,6 +200,10 @@ public class JacksonAutoConfiguration {
} }
} }
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
} }
} }
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