Skip to content

Commit 3dce0c4

Browse files
committed
Changes report #1805
1 parent ea87334 commit 3dce0c4

File tree

6 files changed

+70
-3
lines changed

6 files changed

+70
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public void buildParameters(OpenAPI openAPI, HandlerMethod handlerMethod, Reques
151151
*/
152152
public void buildCommonParameters(OpenAPI openAPI, RequestMethod requestMethod, MethodAttributes methodAttributes, Operation operation, String[] pNames, MethodParameter[] parameters,
153153
DataRestRepository dataRestRepository) {
154-
parameters = DelegatingMethodParameter.customize(pNames, parameters, parameterBuilder.getDelegatingMethodParameterCustomizer());
154+
parameters = DelegatingMethodParameter.customize(pNames, parameters, parameterBuilder.getDelegatingMethodParameterCustomizer(), requestBuilder.isDefaultFlatParamObject());
155155
Class<?> domainType = dataRestRepository.getDomainType();
156156
for (MethodParameter methodParameter : parameters) {
157157
final String pName = methodParameter.getParameterName();

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.springdoc.core.annotations.ParameterObject;
4545
import org.springdoc.core.converters.AdditionalModelsConverter;
4646
import org.springdoc.core.customizers.DelegatingMethodParameterCustomizer;
47+
import org.springdoc.core.service.AbstractRequestService;
4748

4849
import org.springframework.core.MethodParameter;
4950
import org.springframework.core.ParameterNameDiscoverer;
@@ -111,9 +112,11 @@ public class DelegatingMethodParameter extends MethodParameter {
111112
* @param pNames the p names
112113
* @param parameters the parameters
113114
* @param optionalDelegatingMethodParameterCustomizer the optional delegating method parameter customizer
115+
* @param defaultFlatParamObject the default flat param object
114116
* @return the method parameter [ ]
115117
*/
116-
public static MethodParameter[] customize(String[] pNames, MethodParameter[] parameters, Optional<DelegatingMethodParameterCustomizer> optionalDelegatingMethodParameterCustomizer) {
118+
public static MethodParameter[] customize(String[] pNames, MethodParameter[] parameters,
119+
Optional<DelegatingMethodParameterCustomizer> optionalDelegatingMethodParameterCustomizer, boolean defaultFlatParamObject) {
117120
List<MethodParameter> explodedParameters = new ArrayList<>();
118121
for (int i = 0; i < parameters.length; ++i) {
119122
MethodParameter p = parameters[i];
@@ -125,6 +128,22 @@ public static MethodParameter[] customize(String[] pNames, MethodParameter[] par
125128
explodedParameters.add(methodParameter);
126129
});
127130
}
131+
else if (defaultFlatParamObject) {
132+
boolean isSimpleType = MethodParameterPojoExtractor.isSimpleType(paramClass);
133+
boolean hasAnnotation = p.hasParameterAnnotations();
134+
boolean shouldFlat = !isSimpleType && !hasAnnotation;
135+
if (shouldFlat && !AbstractRequestService.isRequestTypeToIgnore(paramClass)) {
136+
MethodParameterPojoExtractor.extractFrom(paramClass).forEach(methodParameter -> {
137+
optionalDelegatingMethodParameterCustomizer
138+
.ifPresent(customizer -> customizer.customize(p, methodParameter));
139+
explodedParameters.add(methodParameter);
140+
});
141+
}
142+
else {
143+
String name = pNames != null ? pNames[i] : p.getParameterName();
144+
explodedParameters.add(new DelegatingMethodParameter(p, name, null, false, false));
145+
}
146+
}
128147
else {
129148
String name = pNames != null ? pNames[i] : p.getParameterName();
130149
explodedParameters.add(new DelegatingMethodParameter(p, name, null, false, false));

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.lang.reflect.Field;
3131
import java.lang.reflect.Type;
3232
import java.lang.reflect.TypeVariable;
33+
import java.nio.charset.Charset;
3334
import java.time.Duration;
3435
import java.time.LocalTime;
3536
import java.util.ArrayList;
@@ -86,6 +87,7 @@ private MethodParameterPojoExtractor() {
8687
SIMPLE_TYPES.add(OptionalDouble.class);
8788
SIMPLE_TYPES.add(AtomicLong.class);
8889
SIMPLE_TYPES.add(AtomicInteger.class);
90+
SIMPLE_TYPES.add(Charset.class);
8991

9092
SIMPLE_TYPES.add(Map.class);
9193
SIMPLE_TYPES.add(Iterable.class);

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/properties/SpringDocConfigProperties.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,11 @@ public class SpringDocConfigProperties {
181181
*/
182182
private boolean showSpringCloudFunctions = true;
183183

184+
/**
185+
* The param default flatten
186+
*/
187+
private boolean defaultFlatParamObject;
188+
184189
/**
185190
* The model Converters
186191
*/
@@ -226,6 +231,24 @@ public class SpringDocConfigProperties {
226231
*/
227232
private SortConverter sortConverter = new SortConverter();
228233

234+
/**
235+
* Is default flat param object boolean.
236+
*
237+
* @return the boolean
238+
*/
239+
public boolean isDefaultFlatParamObject() {
240+
return defaultFlatParamObject;
241+
}
242+
243+
/**
244+
* Sets default flat param object.
245+
*
246+
* @param defaultFlatParamObject the default flat param object
247+
*/
248+
public void setDefaultFlatParamObject(boolean defaultFlatParamObject) {
249+
this.defaultFlatParamObject = defaultFlatParamObject;
250+
}
251+
229252
/**
230253
* Gets sort converter.
231254
*

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,11 @@ public abstract class AbstractRequestService {
172172
*/
173173
private final Optional<List<ParameterCustomizer>> parameterCustomizers;
174174

175+
/**
176+
* The Default flat param object.
177+
*/
178+
private final boolean defaultFlatParamObject;
179+
175180
/**
176181
* Instantiates a new Abstract request builder.
177182
*
@@ -191,6 +196,7 @@ protected AbstractRequestService(GenericParameterService parameterBuilder, Reque
191196
parameterCustomizers.ifPresent(customizers -> customizers.removeIf(Objects::isNull));
192197
this.parameterCustomizers = parameterCustomizers;
193198
this.localSpringDocParameterNameDiscoverer = localSpringDocParameterNameDiscoverer;
199+
this.defaultFlatParamObject = parameterBuilder.getPropertyResolverUtils().getSpringDocConfigProperties().isDefaultFlatParamObject();
194200
}
195201

196202
/**
@@ -245,7 +251,7 @@ public Operation build(HandlerMethod handlerMethod, RequestMethod requestMethod,
245251
String[] reflectionParametersNames = Arrays.stream(handlerMethod.getMethod().getParameters()).map(java.lang.reflect.Parameter::getName).toArray(String[]::new);
246252
if (pNames == null || Arrays.stream(pNames).anyMatch(Objects::isNull))
247253
pNames = reflectionParametersNames;
248-
parameters = DelegatingMethodParameter.customize(pNames, parameters, parameterBuilder.getDelegatingMethodParameterCustomizer());
254+
parameters = DelegatingMethodParameter.customize(pNames, parameters, parameterBuilder.getDelegatingMethodParameterCustomizer(), this.defaultFlatParamObject);
249255
RequestBodyInfo requestBodyInfo = new RequestBodyInfo();
250256
List<Parameter> operationParameters = (operation.getParameters() != null) ? operation.getParameters() : new ArrayList<>();
251257
Map<String, io.swagger.v3.oas.annotations.Parameter> parametersDocMap = getApiParameters(handlerMethod.getMethod());
@@ -746,4 +752,12 @@ private String getParamJavadoc(JavadocProvider javadocProvider, MethodParameter
746752
return paramJavadocDescription;
747753
}
748754

755+
/**
756+
* Is default flat param object boolean.
757+
*
758+
* @return the boolean
759+
*/
760+
public boolean isDefaultFlatParamObject() {
761+
return defaultFlatParamObject;
762+
}
749763
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/PropertyResolverUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,13 @@ private void resolveProperty(Supplier<String> getProperty, Consumer<String> setP
210210
public ConfigurableBeanFactory getFactory() {
211211
return factory;
212212
}
213+
214+
/**
215+
* Gets spring doc config properties.
216+
*
217+
* @return the spring doc config properties
218+
*/
219+
public SpringDocConfigProperties getSpringDocConfigProperties() {
220+
return springDocConfigProperties;
221+
}
213222
}

0 commit comments

Comments
 (0)