Skip to content

Commit 3d62c8e

Browse files
author
springdoc
committed
project review
1 parent 0bde04f commit 3d62c8e

File tree

4 files changed

+71
-27
lines changed

4 files changed

+71
-27
lines changed

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

+8-16
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@
2929

3030
import io.swagger.v3.oas.models.Components;
3131
import io.swagger.v3.oas.models.Operation;
32-
import io.swagger.v3.oas.models.media.ObjectSchema;
3332
import io.swagger.v3.oas.models.media.Schema;
3433
import io.swagger.v3.oas.models.parameters.Parameter;
3534
import io.swagger.v3.oas.models.parameters.RequestBody;
3635

37-
@SuppressWarnings("rawtypes")
3836
public abstract class AbstractRequestBuilder {
3937

4038
private ParameterBuilder parameterBuilder;
@@ -59,8 +57,7 @@ public Operation build(Components components, HandlerMethod handlerMethod, Reque
5957
List<Parameter> operationParameters = new ArrayList<>();
6058
java.lang.reflect.Parameter[] parameters = handlerMethod.getMethod().getParameters();
6159

62-
Schema mergedSchema = null;
63-
RequestBody requestBody = null;
60+
RequestBodyInfo requestBodyInfo = new RequestBodyInfo();
6461

6562
for (int i = 0; i < pNames.length; i++) {
6663
// check if query param
@@ -84,29 +81,24 @@ public Operation build(Components components, HandlerMethod handlerMethod, Reque
8481
applyBeanValidatorAnnotations(parameter, Arrays.asList(parameters[i].getAnnotations()));
8582
operationParameters.add(parameter);
8683
} else if (!RequestMethod.GET.equals(requestMethod)) {
87-
mergedSchema = createMergedSchema(pNames, mergedSchema);
84+
requestBodyInfo.incrementNbParam();
8885
ParameterInfo parameterInfo = new ParameterInfo(pNames[i], parameters[i], parameterDoc);
89-
requestBody = requestBodyBuilder.calculateRequestBody(components, handlerMethod, mediaAttributes,
90-
i, parameterInfo, mergedSchema);
86+
RequestBody requestBody = requestBodyBuilder.calculateRequestBody(components, handlerMethod,
87+
mediaAttributes,
88+
i, parameterInfo, requestBodyInfo);
89+
requestBodyInfo.setRequestBody(requestBody);
9190
}
9291
}
9392
}
9493
if (!CollectionUtils.isEmpty(operationParameters)) {
9594
operation.setParameters(operationParameters);
9695
}
97-
if (requestBody != null)
98-
operation.setRequestBody(requestBody);
96+
if (requestBodyInfo.getRequestBody() != null)
97+
operation.setRequestBody(requestBodyInfo.getRequestBody());
9998

10099
return operation;
101100
}
102101

103-
private Schema createMergedSchema(String[] pNames, Schema mergedSchema) {
104-
if (pNames.length > 1 && mergedSchema == null) {
105-
mergedSchema = new ObjectSchema();
106-
}
107-
return mergedSchema;
108-
}
109-
110102
private boolean isValidPararameter(Parameter parameter) {
111103
return parameter != null && (parameter.getName() != null || parameter.get$ref() != null);
112104
}

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

+6-7
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import io.swagger.v3.oas.models.examples.Example;
3333
import io.swagger.v3.oas.models.media.ArraySchema;
3434
import io.swagger.v3.oas.models.media.FileSchema;
35-
import io.swagger.v3.oas.models.media.ObjectSchema;
3635
import io.swagger.v3.oas.models.media.Schema;
3736
import io.swagger.v3.oas.models.parameters.Parameter;
3837

@@ -94,7 +93,7 @@ public Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter p
9493
}
9594

9695
public Schema calculateSchema(Components components, java.lang.reflect.Parameter parameter, String paramName,
97-
Type type, Schema mergedSchema) {
96+
Type type, RequestBodyInfo requestBodyInfo) {
9897

9998
Schema schemaN = null;
10099
Class<?> schemaImplementation = null;
@@ -116,15 +115,15 @@ public Schema calculateSchema(Components components, java.lang.reflect.Parameter
116115
}
117116

118117
if (MultipartFile.class.isAssignableFrom(ct.getRawClass())) {
119-
schemaN = (mergedSchema != null) ? mergedSchema : new ObjectSchema();
118+
schemaN = requestBodyInfo.initMergedSchema();
120119
schemaN.addProperties(paramName, new FileSchema());
121120
return schemaN;
122121
}
123122

124123
if (returnType instanceof ParameterizedType) {
125124
ParameterizedType parameterizedType = (ParameterizedType) returnType;
126125
if (parameterizedType.getActualTypeArguments()[0].getTypeName().equals(MultipartFile.class.getName())) {
127-
schemaN = (mergedSchema != null) ? mergedSchema : new ObjectSchema();
126+
schemaN = requestBodyInfo.initMergedSchema();
128127
ArraySchema schemafile = new ArraySchema();
129128
schemafile.items(new FileSchema());
130129
schemaN.addProperties(paramName, new ArraySchema().items(new FileSchema()));
@@ -135,9 +134,9 @@ public Schema calculateSchema(Components components, java.lang.reflect.Parameter
135134
schemaN = SpringDocAnnotationsUtils.resolveSchemaFromType(schemaImplementation,
136135
components, null);
137136
}
138-
if (mergedSchema != null) {
139-
mergedSchema.addProperties(paramName, schemaN);
140-
schemaN = mergedSchema;
137+
if (requestBodyInfo != null && requestBodyInfo.getMergedSchema() != null) {
138+
requestBodyInfo.getMergedSchema().addProperties(paramName, schemaN);
139+
schemaN = requestBodyInfo.getMergedSchema();
141140
}
142141

143142
return schemaN;

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

+5-4
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public Optional<RequestBody> buildRequestBodyFromDoc(
7878
}
7979

8080
public RequestBody calculateRequestBody(Components components, HandlerMethod handlerMethod,
81-
MediaAttributes mediaAttributes, int i, ParameterInfo parameterInfo, Schema mergedSchema) {
81+
MediaAttributes mediaAttributes, int i, ParameterInfo parameterInfo, RequestBodyInfo requestBodyInfo) {
8282
RequestBody requestBody = null;
8383

8484
io.swagger.v3.oas.annotations.parameters.RequestBody requestBodyDoc = parameterBuilder.getParameterAnnotation(
@@ -100,16 +100,17 @@ public RequestBody calculateRequestBody(Components components, HandlerMethod han
100100
paramName = StringUtils.defaultIfEmpty(paramName, parameterInfo.getpName());
101101
parameterInfo.setpName(paramName);
102102

103-
return buildRequestBody(requestBody, components, mediaAttributes.getAllConsumes(), parameterInfo, mergedSchema);
103+
return buildRequestBody(requestBody, components, mediaAttributes.getAllConsumes(), parameterInfo,
104+
requestBodyInfo);
104105
}
105106

106107
private RequestBody buildRequestBody(RequestBody requestBody, Components components, String[] allConsumes,
107-
ParameterInfo parameterInfo, Schema mergedSchema) {
108+
ParameterInfo parameterInfo, RequestBodyInfo requestBodyInfo) {
108109
if (requestBody == null)
109110
requestBody = new RequestBody();
110111

111112
Schema<?> schema = parameterBuilder.calculateSchema(components, parameterInfo.getParameter(),
112-
parameterInfo.getpName(), null, mergedSchema);
113+
parameterInfo.getpName(), null, requestBodyInfo);
113114

114115
Content content = new Content();
115116

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.springdoc.core;
2+
3+
import io.swagger.v3.oas.models.media.ObjectSchema;
4+
import io.swagger.v3.oas.models.media.Schema;
5+
import io.swagger.v3.oas.models.parameters.RequestBody;
6+
7+
@SuppressWarnings("rawtypes")
8+
public class RequestBodyInfo {
9+
10+
private RequestBody requestBody;
11+
private Schema mergedSchema;
12+
private int nbParams;
13+
14+
public RequestBody getRequestBody() {
15+
return requestBody;
16+
}
17+
18+
public void incrementNbParam() {
19+
nbParams++;
20+
}
21+
22+
public void setRequestBody(RequestBody requestBody) {
23+
this.requestBody = requestBody;
24+
}
25+
26+
public Schema getMergedSchema() {
27+
if (mergedSchema == null && nbParams > 1) {
28+
mergedSchema = new ObjectSchema();
29+
}
30+
return mergedSchema;
31+
}
32+
33+
public Schema initMergedSchema() {
34+
if (mergedSchema == null) {
35+
mergedSchema = new ObjectSchema();
36+
}
37+
return mergedSchema;
38+
}
39+
40+
public void setMergedSchema(Schema mergedSchema) {
41+
this.mergedSchema = mergedSchema;
42+
}
43+
44+
public int getNbParams() {
45+
return nbParams;
46+
}
47+
48+
public void setNbParams(int nbParams) {
49+
this.nbParams = nbParams;
50+
}
51+
52+
}

0 commit comments

Comments
 (0)