Skip to content

Commit 0025cd1

Browse files
committed
#324 - fix double registration of model converters when grouped api is used
1 parent f5b17a6 commit 0025cd1

File tree

3 files changed

+31
-6
lines changed

3 files changed

+31
-6
lines changed

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.springdoc.core;
22

3-
import io.swagger.v3.core.converter.ModelConverter;
4-
import io.swagger.v3.core.converter.ModelConverters;
53
import io.swagger.v3.core.util.AnnotationsUtils;
64
import io.swagger.v3.core.util.ReflectionUtils;
75
import io.swagger.v3.oas.annotations.Hidden;
@@ -17,6 +15,7 @@
1715
import org.apache.commons.lang3.StringUtils;
1816
import org.slf4j.Logger;
1917
import org.slf4j.LoggerFactory;
18+
import org.springdoc.core.converters.ModelConverterRegistrar;
2019
import org.springframework.beans.factory.config.BeanDefinition;
2120
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
2221
import org.springframework.context.ApplicationContext;
@@ -45,7 +44,7 @@ public class OpenAPIBuilder {
4544
private String serverBaseUrl;
4645

4746
@SuppressWarnings("WeakerAccess")
48-
OpenAPIBuilder(Optional<OpenAPI> openAPI, ApplicationContext context, SecurityParser securityParser, List<ModelConverter> modelConverters) {
47+
OpenAPIBuilder(Optional<OpenAPI> openAPI, ApplicationContext context, SecurityParser securityParser) {
4948
if (openAPI.isPresent()) {
5049
this.openAPI = openAPI.get();
5150
if (this.openAPI.getComponents() == null)
@@ -59,7 +58,6 @@ public class OpenAPIBuilder {
5958
}
6059
this.context = context;
6160
this.securityParser = securityParser;
62-
modelConverters.forEach(ModelConverters.getInstance()::addConverter);
6361
}
6462

6563
private static String splitCamelCase(String str) {

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.swagger.v3.core.converter.ModelConverter;
44
import io.swagger.v3.oas.models.OpenAPI;
5+
import org.springdoc.core.converters.ModelConverterRegistrar;
56
import org.springdoc.core.converters.ObjectNodeConverter;
67
import org.springdoc.core.converters.PropertyCustomizingConverter;
78
import org.springdoc.core.customizers.PropertyCustomizer;
@@ -13,6 +14,7 @@
1314
import org.springframework.context.annotation.Configuration;
1415
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
1516

17+
import java.util.Collections;
1618
import java.util.List;
1719
import java.util.Optional;
1820

@@ -43,8 +45,13 @@ IgnoredParameterAnnotationsDefault ignoredParameterAnnotationsDefault() {
4345
}
4446

4547
@Bean
46-
public OpenAPIBuilder openAPIBuilder(Optional<OpenAPI> openAPI, ApplicationContext context, SecurityParser securityParser, List<ModelConverter> modelConverters) {
47-
return new OpenAPIBuilder(openAPI, context, securityParser, modelConverters);
48+
public OpenAPIBuilder openAPIBuilder(Optional<OpenAPI> openAPI, ApplicationContext context, SecurityParser securityParser) {
49+
return new OpenAPIBuilder(openAPI, context, securityParser);
50+
}
51+
52+
@Bean
53+
public ModelConverterRegistrar modelConverterRegistrar(Optional<List<ModelConverter>> modelConverters) {
54+
return new ModelConverterRegistrar(modelConverters.orElse(Collections.emptyList()));
4855
}
4956

5057
@Bean
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.springdoc.core.converters;
2+
3+
import io.swagger.v3.core.converter.ModelConverter;
4+
import io.swagger.v3.core.converter.ModelConverters;
5+
6+
import java.util.List;
7+
8+
/**
9+
* Wrapper for model converters to only register converters once
10+
*/
11+
public class ModelConverterRegistrar {
12+
13+
/**
14+
* @param modelConverters spring registered model converter beans which have to be
15+
* registered in {@link ModelConverters} instance
16+
*/
17+
public ModelConverterRegistrar(List<ModelConverter> modelConverters) {
18+
modelConverters.forEach(ModelConverters.getInstance()::addConverter);
19+
}
20+
}

0 commit comments

Comments
 (0)