Skip to content

Commit beeb817

Browse files
committed
code review
1 parent 15fba08 commit beeb817

File tree

5 files changed

+35
-55
lines changed

5 files changed

+35
-55
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ public Parameter buildParams(ParameterInfo parameterInfo, int length, Components
424424
}
425425
// By default
426426
if (!isRequestBodyParam(requestMethod, parameterInfo, length)) {
427-
parameterInfo.setRequired(!methodParameter.isOptional());
427+
parameterInfo.setRequired(!((DelegatingMethodParameter) methodParameter).isNotRequired() && !methodParameter.isOptional());
428428
parameterInfo.setParamType(QUERY_PARAM);
429429
parameterInfo.setDefaultValue(null);
430430
return this.buildParam(parameterInfo, components, jsonView);

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

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,20 +68,27 @@ public class DelegatingMethodParameter extends MethodParameter {
6868
*/
6969
private boolean isParameterObject;
7070

71+
/**
72+
* The Is not required.
73+
*/
74+
private boolean isNotRequired;
75+
7176
/**
7277
* Instantiates a new Delegating method parameter.
7378
*
7479
* @param delegate the delegate
7580
* @param parameterName the parameter name
7681
* @param additionalParameterAnnotations the additional parameter annotations
7782
* @param isParameterObject the is parameter object
83+
* @param isNotRequired the is required
7884
*/
79-
DelegatingMethodParameter(MethodParameter delegate, String parameterName, Annotation[] additionalParameterAnnotations, boolean isParameterObject) {
85+
DelegatingMethodParameter(MethodParameter delegate, String parameterName, Annotation[] additionalParameterAnnotations, boolean isParameterObject, boolean isNotRequired) {
8086
super(delegate);
8187
this.delegate = delegate;
8288
this.additionalParameterAnnotations = additionalParameterAnnotations;
8389
this.parameterName = parameterName;
8490
this.isParameterObject = isParameterObject;
91+
this.isNotRequired = isNotRequired;
8592
}
8693

8794
/**
@@ -106,7 +113,7 @@ public static MethodParameter[] customize(String[] pNames, MethodParameter[] par
106113
}
107114
else {
108115
String name = pNames != null ? pNames[i] : p.getParameterName();
109-
explodedParameters.add(new DelegatingMethodParameter(p, name, null, false));
116+
explodedParameters.add(new DelegatingMethodParameter(p, name, null, false, false));
110117
}
111118
}
112119
return explodedParameters.toArray(new MethodParameter[0]);
@@ -188,6 +195,24 @@ public void initParameterNameDiscovery(ParameterNameDiscoverer parameterNameDisc
188195
delegate.initParameterNameDiscovery(parameterNameDiscoverer);
189196
}
190197

198+
/**
199+
* Is not required boolean.
200+
*
201+
* @return the boolean
202+
*/
203+
public boolean isNotRequired() {
204+
return isNotRequired;
205+
}
206+
207+
/**
208+
* Sets not required.
209+
*
210+
* @param notRequired the not required
211+
*/
212+
public void setNotRequired(boolean notRequired) {
213+
isNotRequired = notRequired;
214+
}
215+
191216
@Override
192217
public boolean equals(Object o) {
193218
if (this == o) return true;

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

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,8 @@
4646

4747
import io.swagger.v3.core.util.PrimitiveType;
4848
import io.swagger.v3.oas.annotations.Parameter;
49-
import org.apache.commons.lang3.ArrayUtils;
5049

5150
import org.springframework.core.MethodParameter;
52-
import org.springframework.lang.Nullable;
5351

5452
/**
5553
* The type Method parameter pojo extractor.
@@ -63,11 +61,6 @@ class MethodParameterPojoExtractor {
6361
private MethodParameterPojoExtractor() {
6462
}
6563

66-
/**
67-
* The constant NULLABLE_ANNOTATION.
68-
*/
69-
private static final Nullable NULLABLE_ANNOTATION = getNullable();
70-
7164
/**
7265
* The constant SIMPLE_TYPE_PREDICATES.
7366
*/
@@ -172,33 +165,21 @@ private static Stream<MethodParameter> extractTypeParameter(
172165
private static Stream<MethodParameter> fromSimpleClass(Class<?> paramClass, Field field, String fieldNamePrefix) {
173166
Annotation[] fieldAnnotations = field.getDeclaredAnnotations();
174167
try {
175-
Nullable nullableField = NULLABLE_ANNOTATION;
176-
if (isOptional(field))
177-
fieldAnnotations = ArrayUtils.add(fieldAnnotations, nullableField);
168+
Parameter parameter = field.getAnnotation(Parameter.class);
169+
boolean isNotRequired = parameter == null || !parameter.required();
178170
Annotation[] finalFieldAnnotations = fieldAnnotations;
179171
return Stream.of(Introspector.getBeanInfo(paramClass).getPropertyDescriptors())
180172
.filter(d -> d.getName().equals(field.getName()))
181173
.map(PropertyDescriptor::getReadMethod)
182174
.filter(Objects::nonNull)
183175
.map(method -> new MethodParameter(method, -1))
184-
.map(param -> new DelegatingMethodParameter(param, fieldNamePrefix + field.getName(), finalFieldAnnotations, true));
176+
.map(param -> new DelegatingMethodParameter(param, fieldNamePrefix + field.getName(), finalFieldAnnotations, true, isNotRequired));
185177
}
186178
catch (IntrospectionException e) {
187179
return Stream.of();
188180
}
189181
}
190182

191-
/**
192-
* Is optional boolean.
193-
*
194-
* @param field the field
195-
* @return the boolean
196-
*/
197-
private static boolean isOptional(Field field) {
198-
Parameter parameter = field.getAnnotation(Parameter.class);
199-
return parameter == null || !parameter.required();
200-
}
201-
202183
/**
203184
* All fields of list.
204185
*
@@ -263,29 +244,4 @@ static void removeSimpleTypes(Class<?>... classes) {
263244
SIMPLE_TYPES.removeAll(Arrays.asList(classes));
264245
}
265246

266-
/**
267-
* The type Nullable field class.
268-
* @author bnasslahsen
269-
*/
270-
private class NullableFieldClass {
271-
/**
272-
* The Nullable field.
273-
*/
274-
@Nullable
275-
private String nullableField;
276-
}
277-
278-
/**
279-
* Gets nullable.
280-
*
281-
* @return the nullable
282-
*/
283-
private static Nullable getNullable() {
284-
try {
285-
return NullableFieldClass.class.getDeclaredField("nullableField").getAnnotation(Nullable.class);
286-
}
287-
catch (NoSuchFieldException e) {
288-
return null;
289-
}
290-
}
291247
}

springdoc-openapi-data-rest/src/main/java/org/springdoc/data/rest/core/DataRestOperationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ private Operation buildSearchOperation(HandlerMethod handlerMethod, DataRestRepo
195195
HandlerMethod repositoryHandlerMethod = new HandlerMethod(methodResourceMapping.getMethod().getDeclaringClass(), methodResourceMapping.getMethod());
196196
MethodParameter[] parameters = repositoryHandlerMethod.getMethodParameters();
197197
for (MethodParameter methodParameter : parameters) {
198-
dataRestRequestService.buildCommonParameters(openAPI, requestMethod, methodAttributes, operation, new String[] { methodParameter.getParameterName() }, new MethodParameter[] { methodParameter }, resourceMetadata, dataRestRepository);
198+
dataRestRequestService.buildCommonParameters(openAPI, requestMethod, methodAttributes, operation, new String[] { methodParameter.getParameterName() }, new MethodParameter[] { methodParameter }, dataRestRepository);
199199
}
200200
}
201201

@@ -225,7 +225,7 @@ private Operation buildSearchOperation(HandlerMethod handlerMethod, DataRestRepo
225225
MethodParameter[] parameters = handlerMethod.getMethodParameters();
226226
Arrays.stream(parameters).filter(methodParameter -> DefaultedPageable.class.equals(methodParameter.getParameterType())).findAny()
227227
.ifPresent(methodParameterPage -> dataRestRequestService.buildCommonParameters(openAPI, requestMethod, methodAttributes, operation,
228-
new String[] { methodParameterPage.getParameterName() }, new MethodParameter[] { methodParameterPage }, resourceMetadata, dataRestRepository));
228+
new String[] { methodParameterPage.getParameterName() }, new MethodParameter[] { methodParameterPage }, dataRestRepository));
229229
}
230230
dataRestResponseService.buildSearchResponse(operation, handlerMethod, openAPI, methodResourceMapping, domainType, methodAttributes, resourceMetadata, dataRestRepository);
231231
tagsBuilder.buildSearchTags(operation, handlerMethod, dataRestRepository, method);

springdoc-openapi-data-rest/src/main/java/org/springdoc/data/rest/core/DataRestRequestService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public void buildParameters(OpenAPI openAPI, HandlerMethod handlerMethod, Reques
133133
String[] reflectionParametersNames = Arrays.stream(handlerMethod.getMethod().getParameters()).map(java.lang.reflect.Parameter::getName).toArray(String[]::new);
134134
if (pNames == null || Arrays.stream(pNames).anyMatch(Objects::isNull))
135135
pNames = reflectionParametersNames;
136-
buildCommonParameters(openAPI, requestMethod, methodAttributes, operation, pNames, parameters, resourceMetadata, dataRestRepository);
136+
buildCommonParameters(openAPI, requestMethod, methodAttributes, operation, pNames, parameters, dataRestRepository);
137137
}
138138

139139
/**
@@ -145,11 +145,10 @@ public void buildParameters(OpenAPI openAPI, HandlerMethod handlerMethod, Reques
145145
* @param operation the operation
146146
* @param pNames the p names
147147
* @param parameters the parameters
148-
* @param resourceMetadata the resource metadata
149148
* @param dataRestRepository the data rest repository
150149
*/
151150
public void buildCommonParameters(OpenAPI openAPI, RequestMethod requestMethod, MethodAttributes methodAttributes, Operation operation, String[] pNames, MethodParameter[] parameters,
152-
ResourceMetadata resourceMetadata, DataRestRepository dataRestRepository) {
151+
DataRestRepository dataRestRepository) {
153152
parameters = DelegatingMethodParameter.customize(pNames, parameters, parameterBuilder.getDelegatingMethodParameterCustomizer());
154153
Class<?> domainType = dataRestRepository.getDomainType();
155154
for (MethodParameter methodParameter : parameters) {

0 commit comments

Comments
 (0)