Skip to content

Commit 7b7f2e6

Browse files
author
bnasslahsen
committed
change ParameterCustomizer interface and review code formatting
1 parent 34c0b38 commit 7b7f2e6

File tree

90 files changed

+858
-683
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+858
-683
lines changed

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0"
2-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
1+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>org.springdoc</groupId>
66
<artifactId>springdoc-openapi</artifactId>

springdoc-openapi-common/pom.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
1+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
24
<modelVersion>4.0.0</modelVersion>
35
<artifactId>springdoc-openapi-common</artifactId>
46
<name>${project.artifactId}</name>

springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -68,23 +68,35 @@
6868
public abstract class AbstractOpenApiResource extends SpecFilter {
6969

7070
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractOpenApiResource.class);
71-
private final AbstractRequestBuilder requestBuilder;
72-
private final GenericResponseBuilder responseBuilder;
73-
private final OperationBuilder operationParser;
74-
private final Optional<List<OpenApiCustomiser>> openApiCustomisers;
75-
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
71+
7672
private static final List<Class<?>> ADDITIONAL_REST_CONTROLLERS = new ArrayList<>();
73+
7774
private static final List<Class<?>> HIDDEN_REST_CONTROLLERS = new ArrayList<>();
75+
7876
private static final List<Class> DEPRECATED_TYPES = new ArrayList<>();
79-
private boolean computeDone;
80-
private final String groupName;
81-
protected final OpenAPIBuilder openAPIBuilder;
82-
protected final SpringDocConfigProperties springDocConfigProperties;
8377

8478
static {
8579
DEPRECATED_TYPES.add(Deprecated.class);
8680
}
8781

82+
protected final OpenAPIBuilder openAPIBuilder;
83+
84+
protected final SpringDocConfigProperties springDocConfigProperties;
85+
86+
private final AbstractRequestBuilder requestBuilder;
87+
88+
private final GenericResponseBuilder responseBuilder;
89+
90+
private final OperationBuilder operationParser;
91+
92+
private final Optional<List<OpenApiCustomiser>> openApiCustomisers;
93+
94+
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
95+
96+
private final String groupName;
97+
98+
private boolean computeDone;
99+
88100
protected AbstractOpenApiResource(String groupName, OpenAPIBuilder openAPIBuilder,
89101
AbstractRequestBuilder requestBuilder,
90102
GenericResponseBuilder responseBuilder, OperationBuilder operationParser,
@@ -100,6 +112,18 @@ protected AbstractOpenApiResource(String groupName, OpenAPIBuilder openAPIBuilde
100112
this.springDocConfigProperties = springDocConfigProperties;
101113
}
102114

115+
public static void addRestControllers(Class<?>... classes) {
116+
ADDITIONAL_REST_CONTROLLERS.addAll(Arrays.asList(classes));
117+
}
118+
119+
public static void addHiddenRestControllers(Class<?>... classes) {
120+
HIDDEN_REST_CONTROLLERS.addAll(Arrays.asList(classes));
121+
}
122+
123+
public static void addDeprecatedType(Class<?> cls) {
124+
DEPRECATED_TYPES.add(cls);
125+
}
126+
103127
protected synchronized OpenAPI getOpenApi() {
104128
OpenAPI openApi;
105129
if (!computeDone || springDocConfigProperties.isCacheDisabled()) {
@@ -378,16 +402,4 @@ private boolean isDeprecatedType(Method method) {
378402
return DEPRECATED_TYPES.stream().anyMatch(clazz -> (AnnotatedElementUtils.findMergedAnnotation(method, clazz) != null));
379403
}
380404

381-
public static void addRestControllers(Class<?>... classes) {
382-
ADDITIONAL_REST_CONTROLLERS.addAll(Arrays.asList(classes));
383-
}
384-
385-
public static void addHiddenRestControllers(Class<?>... classes) {
386-
HIDDEN_REST_CONTROLLERS.addAll(Arrays.asList(classes));
387-
}
388-
389-
public static void addDeprecatedType(Class<?> cls) {
390-
DEPRECATED_TYPES.add(cls);
391-
}
392-
393405
}

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

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.LinkedHashMap;
2828
import java.util.List;
2929
import java.util.Map;
30+
import java.util.Objects;
3031
import java.util.Optional;
3132
import java.util.Set;
3233
import java.util.stream.Collectors;
@@ -81,17 +82,13 @@
8182

8283
public abstract class AbstractRequestBuilder {
8384

84-
private final GenericParameterBuilder parameterBuilder;
85-
private final RequestBodyBuilder requestBodyBuilder;
86-
private final OperationBuilder operationBuilder;
87-
private final LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
88-
private final Optional<List<OperationCustomizer>> operationCustomizers;
89-
private final Optional<List<ParameterCustomizer>> parameterCustomizers;
90-
9185
private static final List<Class> PARAM_TYPES_TO_IGNORE = new ArrayList<>();
86+
9287
// using string litterals to support both validation-api v1 and v2
9388
private static final String[] ANNOTATIONS_FOR_REQUIRED = { NotNull.class.getName(), org.springframework.web.bind.annotation.RequestBody.class.getName(), "javax.validation.constraints.NotBlank", "javax.validation.constraints.NotEmpty" };
89+
9490
private static final String POSITIVE_OR_ZERO = "javax.validation.constraints.PositiveOrZero";
91+
9592
private static final String NEGATIVE_OR_ZERO = "javax.validation.constraints.NegativeOrZero";
9693

9794
static {
@@ -116,16 +113,42 @@ public abstract class AbstractRequestBuilder {
116113
PARAM_TYPES_TO_IGNORE.add(RequestAttribute.class);
117114
}
118115

116+
private final GenericParameterBuilder parameterBuilder;
117+
118+
private final RequestBodyBuilder requestBodyBuilder;
119+
120+
private final OperationBuilder operationBuilder;
121+
122+
private final LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
123+
124+
private final Optional<List<OperationCustomizer>> operationCustomizers;
125+
126+
private final Optional<List<ParameterCustomizer>> parameterCustomizers;
127+
119128
protected AbstractRequestBuilder(GenericParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
120129
OperationBuilder operationBuilder, Optional<List<OperationCustomizer>> operationCustomizers,
121130
Optional<List<ParameterCustomizer>> parameterCustomizers, LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
122131
super();
123132
this.parameterBuilder = parameterBuilder;
124133
this.requestBodyBuilder = requestBodyBuilder;
125134
this.operationBuilder = operationBuilder;
135+
if (operationCustomizers.isPresent())
136+
operationCustomizers.get().removeIf(Objects::isNull);
126137
this.operationCustomizers = operationCustomizers;
138+
if (parameterCustomizers.isPresent())
139+
parameterCustomizers.get().removeIf(Objects::isNull);
127140
this.parameterCustomizers = parameterCustomizers;
128-
this.localSpringDocParameterNameDiscoverer=localSpringDocParameterNameDiscoverer;
141+
this.localSpringDocParameterNameDiscoverer = localSpringDocParameterNameDiscoverer;
142+
}
143+
144+
public static void addRequestWrapperToIgnore(Class<?>... classes) {
145+
PARAM_TYPES_TO_IGNORE.addAll(Arrays.asList(classes));
146+
}
147+
148+
public static void removeRequestWrapperToIgnore(Class<?>... classes) {
149+
List classesToIgnore = Arrays.asList(classes);
150+
if (PARAM_TYPES_TO_IGNORE.containsAll(classesToIgnore))
151+
PARAM_TYPES_TO_IGNORE.removeAll(Arrays.asList(classes));
129152
}
130153

131154
public Operation build(HandlerMethod handlerMethod, RequestMethod requestMethod,
@@ -143,7 +166,7 @@ public Operation build(HandlerMethod handlerMethod, RequestMethod requestMethod,
143166
RequestBodyInfo requestBodyInfo = new RequestBodyInfo();
144167
List<Parameter> operationParameters = (operation.getParameters() != null) ? operation.getParameters() : new ArrayList<>();
145168
Map<String, io.swagger.v3.oas.annotations.Parameter> parametersDocMap = getApiParameters(handlerMethod.getMethod());
146-
Components components = openAPI.getComponents();
169+
Components components = openAPI.getComponents();
147170

148171
for (int i = 0; i < pNames.length; i++) {
149172
// check if query param
@@ -225,14 +248,14 @@ protected Operation customiseOperation(Operation operation, HandlerMethod handle
225248
}
226249

227250
protected Parameter customiseParameter(Parameter parameter, ParameterInfo parameterInfo, HandlerMethod handlerMethod) {
228-
parameterCustomizers.ifPresent(customizers -> customizers.forEach(customizer -> customizer.customize(parameter, parameterInfo.getParameter(), handlerMethod)));
251+
parameterCustomizers.ifPresent(customizers -> customizers.forEach(customizer -> customizer.customize(parameter, parameterInfo.getMethodParameter())));
229252
return parameter;
230253
}
231254

232255
protected boolean isParamToIgnore(MethodParameter parameter) {
233-
if(parameterBuilder.isAnnotationToIgnore(parameter))
256+
if (parameterBuilder.isAnnotationToIgnore(parameter))
234257
return true;
235-
if (parameter.getParameterAnnotation(PathVariable.class) !=null || parameter.getParameterAnnotation(RequestParam.class) !=null)
258+
if (parameter.getParameterAnnotation(PathVariable.class) != null || parameter.getParameterAnnotation(RequestParam.class) != null)
236259
return false;
237260
return PARAM_TYPES_TO_IGNORE.contains(parameter.getParameterType());
238261
}
@@ -264,7 +287,7 @@ private Parameter buildParams(ParameterInfo parameterInfo, Components components
264287
parameter = buildParam(parameterInfo, components, requestInfo, jsonView);
265288

266289
}
267-
else if (requestParam != null && !parameterBuilder.isFile(parameterInfo.getParameter())) {
290+
else if (requestParam != null && !parameterBuilder.isFile(parameterInfo.getMethodParameter())) {
268291
requestInfo = new RequestInfo(ParameterIn.QUERY.toString(), requestParam.value(), requestParam.required() && !methodParameter.isOptional(),
269292
requestParam.defaultValue());
270293
parameter = buildParam(parameterInfo, components, requestInfo, jsonView);
@@ -334,7 +357,6 @@ private Parameter buildParam(String in, Components components, ParameterInfo par
334357
return parameter;
335358
}
336359

337-
338360
private void applyBeanValidatorAnnotations(final Parameter parameter, final List<Annotation> annotations) {
339361
Map<String, Annotation> annos = new HashMap<>();
340362
if (annotations != null)
@@ -445,14 +467,4 @@ private void applyValidationsToSchema(Map<String, Annotation> annos, Schema<?> s
445467
}
446468
}
447469

448-
public static void addRequestWrapperToIgnore(Class<?>... classes) {
449-
PARAM_TYPES_TO_IGNORE.addAll(Arrays.asList(classes));
450-
}
451-
452-
public static void removeRequestWrapperToIgnore(Class<?>... classes) {
453-
List classesToIgnore = Arrays.asList(classes);
454-
if (PARAM_TYPES_TO_IGNORE.containsAll(classesToIgnore))
455-
PARAM_TYPES_TO_IGNORE.removeAll(Arrays.asList(classes));
456-
}
457-
458470
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public final class Constants {
5050

5151
public static final String NULL = ":#{null}";
5252

53-
public static final String MVC_SERVLET_PATH = "${spring.mvc.servlet.path"+ NULL +"}";
53+
public static final String MVC_SERVLET_PATH = "${spring.mvc.servlet.path" + NULL + "}";
5454

5555
public static final String SPRINGDOC_SWAGGER_UI_URL_VALUE = "${" + SPRINGDOC_SWAGGER_UI_URL + NULL + "}";
5656

@@ -86,7 +86,7 @@ public final class Constants {
8686

8787
public static final String SWAGGER_UI_PATH = "${springdoc.swagger-ui.path:#{T(org.springdoc.core.Constants).DEFAULT_SWAGGER_UI_PATH}}";
8888

89-
public static final String DEFAULT_GROUP_NAME="springdocDefault";
89+
public static final String DEFAULT_GROUP_NAME = "springdocDefault";
9090

9191
public static final String GET_METHOD = "get";
9292

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

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,35 @@
5454
@SuppressWarnings("rawtypes")
5555
public class GenericParameterBuilder {
5656

57-
private final PropertyResolverUtils propertyResolverUtils;
5857
private static final List<Class<?>> FILE_TYPES = new ArrayList<>();
58+
5959
private static final List<Class> ANNOTATIOSN_TO_IGNORE = new ArrayList<>();
6060

6161
static {
6262
FILE_TYPES.add(MultipartFile.class);
6363
ANNOTATIOSN_TO_IGNORE.add(Hidden.class);
6464
}
6565

66+
private final PropertyResolverUtils propertyResolverUtils;
67+
6668
public GenericParameterBuilder(PropertyResolverUtils propertyResolverUtils) {
6769
this.propertyResolverUtils = propertyResolverUtils;
6870
}
6971

72+
public static void addFileType(Class<?>... classes) {
73+
FILE_TYPES.addAll(Arrays.asList(classes));
74+
}
75+
76+
public static void addAnnotationsToIgnore(Class<?>... classes) {
77+
ANNOTATIOSN_TO_IGNORE.addAll(Arrays.asList(classes));
78+
}
79+
80+
public static void removeAnnotationsToIgnore(Class<?>... classes) {
81+
List classesToIgnore = Arrays.asList(classes);
82+
if (ANNOTATIOSN_TO_IGNORE.containsAll(classesToIgnore))
83+
ANNOTATIOSN_TO_IGNORE.removeAll(Arrays.asList(classes));
84+
}
85+
7086
Parameter mergeParameter(List<Parameter> existingParamDoc, Parameter paramCalcul) {
7187
Parameter result = paramCalcul;
7288
if (paramCalcul != null && paramCalcul.getName() != null) {
@@ -181,10 +197,10 @@ Schema calculateSchema(Components components, ParameterInfo parameterInfo, Reque
181197
Schema schemaN;
182198
String paramName = parameterInfo.getpName();
183199
MethodParameter methodParameter = parameterInfo.getMethodParameter();
184-
JavaType ct = constructType(methodParameter.getParameterType());
200+
Class type = methodParameter.getParameterType();
185201

186202
if (parameterInfo.getParameterModel() == null || parameterInfo.getParameterModel().getSchema() == null) {
187-
if (isFile(ct)) {
203+
if (isFile(type)) {
188204
schemaN = getFileSchema(requestBodyInfo);
189205
schemaN.addProperties(paramName, new FileSchema());
190206
return schemaN;
@@ -213,20 +229,16 @@ else if (methodParameter.getGenericParameterType() instanceof ParameterizedType)
213229
return schemaN;
214230
}
215231

216-
public boolean isFile(java.lang.reflect.Parameter parameter) {
217-
boolean result = false;
218-
Type type = parameter.getParameterizedType();
219-
JavaType javaType = this.constructType(type);
220-
if (isFile(javaType)) {
221-
result = true;
222-
}
223-
else if (type instanceof ParameterizedType) {
232+
public boolean isFile(MethodParameter methodParameter) {
233+
if (methodParameter.getGenericParameterType() instanceof ParameterizedType) {
234+
Type type = methodParameter.getGenericParameterType();
224235
ParameterizedType parameterizedType = (ParameterizedType) type;
225-
if (isFile(parameterizedType)) {
226-
result = true;
227-
}
236+
return isFile(parameterizedType);
237+
}
238+
else {
239+
Class type = methodParameter.getParameterType();
240+
return isFile(type);
228241
}
229-
return result;
230242
}
231243

232244
public boolean isAnnotationToIgnore(MethodParameter parameter) {
@@ -323,21 +335,7 @@ private JavaType constructType(Type type) {
323335
return TypeFactory.defaultInstance().constructType(type);
324336
}
325337

326-
private boolean isFile(JavaType ct) {
327-
return FILE_TYPES.stream().anyMatch(clazz -> clazz.isAssignableFrom(ct.getRawClass()));
328-
}
329-
330-
public static void addFileType(Class<?>... classes) {
331-
FILE_TYPES.addAll(Arrays.asList(classes));
332-
}
333-
334-
public static void addAnnotationsToIgnore(Class<?>... classes) {
335-
ANNOTATIOSN_TO_IGNORE.addAll(Arrays.asList(classes));
336-
}
337-
338-
public static void removeAnnotationsToIgnore(Class<?>... classes) {
339-
List classesToIgnore = Arrays.asList(classes);
340-
if (ANNOTATIOSN_TO_IGNORE.containsAll(classesToIgnore))
341-
ANNOTATIOSN_TO_IGNORE.removeAll(Arrays.asList(classes));
338+
private boolean isFile(Class type) {
339+
return FILE_TYPES.stream().anyMatch(clazz -> clazz.isAssignableFrom(type));
342340
}
343341
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,13 @@
5858
public class GenericResponseBuilder {
5959

6060
private final Map<String, ApiResponse> genericMapResponse = new LinkedHashMap<>();
61+
6162
private final OperationBuilder operationBuilder;
63+
6264
private final List<ReturnTypeParser> returnTypeParsers;
65+
6366
private final SpringDocConfigProperties springDocConfigProperties;
67+
6468
private final PropertyResolverUtils propertyResolverUtils;
6569

6670
GenericResponseBuilder(OperationBuilder operationBuilder, List<ReturnTypeParser> returnTypeParsers,

0 commit comments

Comments
 (0)