Skip to content

Commit e986414

Browse files
committed
sync springdoc#2291 and clear logic for flat parameter object
1 parent 843bf1d commit e986414

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

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

+11-23
Original file line numberDiff line numberDiff line change
@@ -21,33 +21,24 @@
2121
*/
2222
package org.springdoc.core;
2323

24-
import java.lang.annotation.Annotation;
25-
import java.lang.reflect.AnnotatedElement;
26-
import java.lang.reflect.Constructor;
27-
import java.lang.reflect.Executable;
28-
import java.lang.reflect.Field;
29-
import java.lang.reflect.Member;
30-
import java.lang.reflect.Method;
31-
import java.lang.reflect.Type;
32-
import java.util.ArrayList;
33-
import java.util.Arrays;
34-
import java.util.List;
35-
import java.util.Objects;
36-
import java.util.Optional;
37-
3824
import org.apache.commons.lang3.ArrayUtils;
3925
import org.apache.commons.lang3.reflect.FieldUtils;
4026
import org.slf4j.Logger;
4127
import org.slf4j.LoggerFactory;
4228
import org.springdoc.api.annotations.ParameterObject;
4329
import org.springdoc.core.converters.AdditionalModelsConverter;
4430
import org.springdoc.core.customizers.DelegatingMethodParameterCustomizer;
45-
4631
import org.springframework.core.MethodParameter;
4732
import org.springframework.core.ParameterNameDiscoverer;
4833
import org.springframework.core.annotation.AnnotatedElementUtils;
4934
import org.springframework.lang.NonNull;
5035
import org.springframework.lang.Nullable;
36+
import org.springframework.web.bind.annotation.RequestBody;
37+
import org.springframework.web.bind.annotation.RequestPart;
38+
39+
import java.lang.annotation.Annotation;
40+
import java.lang.reflect.*;
41+
import java.util.*;
5142

5243
/**
5344
* The type Delegating method parameter.
@@ -119,19 +110,16 @@ public static MethodParameter[] customize(String[] pNames, MethodParameter[] par
119110
MethodParameter p = parameters[i];
120111
Class<?> paramClass = AdditionalModelsConverter.getParameterObjectReplacement(p.getParameterType());
121112

122-
if (!MethodParameterPojoExtractor.isSimpleType(paramClass) && (p.hasParameterAnnotation(ParameterObject.class) || AnnotatedElementUtils.isAnnotated(paramClass, ParameterObject.class))) {
113+
boolean hasFlatAnnotation = p.hasParameterAnnotation(ParameterObject.class) || AnnotatedElementUtils.isAnnotated(paramClass, ParameterObject.class);
114+
boolean hasNotFlatAnnotation = Arrays.stream(p.getParameterAnnotations())
115+
.anyMatch(annotation -> Arrays.asList(RequestBody.class, RequestPart.class).contains(annotation.annotationType()));
116+
if (!MethodParameterPojoExtractor.isSimpleType(paramClass)
117+
&& (hasFlatAnnotation || (defaultFlatParamObject && !hasNotFlatAnnotation && !AbstractRequestService.isRequestTypeToIgnore(paramClass)))) {
123118
MethodParameterPojoExtractor.extractFrom(paramClass).forEach(methodParameter -> {
124119
optionalDelegatingMethodParameterCustomizer.ifPresent(customizer -> customizer.customize(p, methodParameter));
125120
explodedParameters.add(methodParameter);
126121
});
127122
}
128-
else if (defaultFlatParamObject && !MethodParameterPojoExtractor.isSimpleType(paramClass) && !AbstractRequestService.isRequestTypeToIgnore(paramClass)) {
129-
MethodParameterPojoExtractor.extractFrom(paramClass).forEach(methodParameter -> {
130-
optionalDelegatingMethodParameterCustomizer
131-
.ifPresent(customizer -> customizer.customize(p, methodParameter));
132-
explodedParameters.add(methodParameter);
133-
});
134-
}
135123
else {
136124
String name = pNames != null ? pNames[i] : p.getParameterName();
137125
explodedParameters.add(new DelegatingMethodParameter(p, name, null, false, false));

0 commit comments

Comments
 (0)