4040
4141import org .springframework .beans .factory .config .BeanFactoryPostProcessor ;
4242import org .springframework .beans .factory .config .ConfigurableBeanFactory ;
43+ import org .springframework .beans .factory .config .ConfigurableListableBeanFactory ;
44+ import org .springframework .boot .autoconfigure .condition .ConditionalOnClass ;
4345import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
46+ import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingClass ;
4447import org .springframework .boot .autoconfigure .condition .ConditionalOnProperty ;
4548import org .springframework .boot .autoconfigure .condition .ConditionalOnWebApplication ;
4649import 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