Simplify registration of Jackson mixin types

See gh-30152
This commit is contained in:
Guirong Hu
2022-03-10 11:37:16 +08:00
committed by Andy Wilkinson
parent 45f393b76b
commit df417bf317
12 changed files with 853 additions and 1 deletions

View File

@@ -41,11 +41,14 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.jackson.JacksonProperties.ConstructorDetectorStrategy;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.jackson.JsonComponentModule;
import org.springframework.boot.jackson.JsonMixinModule;
import org.springframework.boot.jackson.JsonMixinScanPackages;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -93,6 +96,15 @@ public class JacksonAutoConfiguration {
return new JsonComponentModule();
}
@Bean
public JsonMixinModule jsonMixinModule(ApplicationContext context) {
List<String> packages = JsonMixinScanPackages.get(context).getPackageNames();
if (packages.isEmpty() && AutoConfigurationPackages.has(context)) {
packages = AutoConfigurationPackages.get(context);
}
return new JsonMixinModule(context, packages);
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Jackson2ObjectMapperBuilder.class)
static class JacksonObjectMapperConfiguration {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -52,6 +52,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.boot.jackson.JsonMixinModule;
import org.springframework.boot.jackson.JsonObjectSerializer;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
@@ -90,6 +91,11 @@ class JacksonAutoConfigurationTests {
});
}
@Test
void jsonMixinModuleShouldBeAutoconfigured() {
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(JsonMixinModule.class));
}
@Test
void noCustomDateFormat() {
this.contextRunner.run((context) -> {