Skip to content

Commit 73b1b83

Browse files
author
bnasslahsen
committed
Spring 4 incompatibility using springdoc-openapi 1.2.30+. Fixes #563.
1 parent fed017e commit 73b1b83

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfiguration.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@
4040

4141
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
4242
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
43+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
44+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
4345
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
46+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
4447
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
4548
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
4649
import org.springframework.boot.context.properties.bind.BindResult;
@@ -68,6 +71,8 @@ public class SpringDocConfiguration {
6871
getConfig().replaceWithSchema(ObjectNode.class, new ObjectSchema());
6972
}
7073

74+
private final String BINDRESULT_CLASS = "org.springframework.boot.context.properties.bind.BindResult";
75+
7176
@Bean
7277
LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer() {
7378
return new LocalVariableTableParameterNameDiscoverer();
@@ -158,6 +163,7 @@ OpenApiCustomiser propertiesResolverForSchema(PropertyResolverUtils propertyReso
158163

159164
@Bean
160165
@Conditional(CacheOrGroupedOpenApiCondition.class)
166+
@ConditionalOnClass(name= BINDRESULT_CLASS)
161167
@Lazy(false)
162168
BeanFactoryPostProcessor springdocBeanFactoryPostProcessor(Environment environment) {
163169
return beanFactory -> {
@@ -177,10 +183,23 @@ BeanFactoryPostProcessor springdocBeanFactoryPostProcessor(Environment environme
177183
.collect(Collectors.toList());
178184
groupedOpenApis.forEach(elt -> beanFactory.registerSingleton(elt.getGroup(), elt));
179185
}
180-
for (String beanName : beanFactory.getBeanNamesForType(OpenAPIBuilder.class))
181-
beanFactory.getBeanDefinition(beanName).setScope(SCOPE_PROTOTYPE);
182-
for (String beanName : beanFactory.getBeanNamesForType(OpenAPI.class))
183-
beanFactory.getBeanDefinition(beanName).setScope(SCOPE_PROTOTYPE);
186+
initBeanFactoryPostProcessor(beanFactory);
184187
};
185188
}
189+
190+
// For spring-boot-1 compatibility
191+
@Bean
192+
@Conditional(CacheOrGroupedOpenApiCondition.class)
193+
@ConditionalOnMissingClass(value = BINDRESULT_CLASS)
194+
@Lazy(false)
195+
BeanFactoryPostProcessor springdocBeanFactoryPostProcessor2(Environment environment) {
196+
return beanFactory -> initBeanFactoryPostProcessor(beanFactory);
197+
}
198+
199+
private void initBeanFactoryPostProcessor(ConfigurableListableBeanFactory beanFactory) {
200+
for (String beanName : beanFactory.getBeanNamesForType(OpenAPIBuilder.class))
201+
beanFactory.getBeanDefinition(beanName).setScope(SCOPE_PROTOTYPE);
202+
for (String beanName : beanFactory.getBeanNamesForType(OpenAPI.class))
203+
beanFactory.getBeanDefinition(beanName).setScope(SCOPE_PROTOTYPE);
204+
}
186205
}

0 commit comments

Comments
 (0)