Skip to content

Commit

Permalink
Changes report #1805
Browse files Browse the repository at this point in the history
  • Loading branch information
bnasslahsen committed Aug 20, 2022
1 parent ea87334 commit 3dce0c4
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 3 deletions.
Expand Up @@ -151,7 +151,7 @@ public void buildParameters(OpenAPI openAPI, HandlerMethod handlerMethod, Reques
*/
public void buildCommonParameters(OpenAPI openAPI, RequestMethod requestMethod, MethodAttributes methodAttributes, Operation operation, String[] pNames, MethodParameter[] parameters,
DataRestRepository dataRestRepository) {
parameters = DelegatingMethodParameter.customize(pNames, parameters, parameterBuilder.getDelegatingMethodParameterCustomizer());
parameters = DelegatingMethodParameter.customize(pNames, parameters, parameterBuilder.getDelegatingMethodParameterCustomizer(), requestBuilder.isDefaultFlatParamObject());
Class<?> domainType = dataRestRepository.getDomainType();
for (MethodParameter methodParameter : parameters) {
final String pName = methodParameter.getParameterName();
Expand Down
Expand Up @@ -44,6 +44,7 @@
import org.springdoc.core.annotations.ParameterObject;
import org.springdoc.core.converters.AdditionalModelsConverter;
import org.springdoc.core.customizers.DelegatingMethodParameterCustomizer;
import org.springdoc.core.service.AbstractRequestService;

import org.springframework.core.MethodParameter;
import org.springframework.core.ParameterNameDiscoverer;
Expand Down Expand Up @@ -111,9 +112,11 @@ public class DelegatingMethodParameter extends MethodParameter {
* @param pNames the p names
* @param parameters the parameters
* @param optionalDelegatingMethodParameterCustomizer the optional delegating method parameter customizer
* @param defaultFlatParamObject the default flat param object
* @return the method parameter [ ]
*/
public static MethodParameter[] customize(String[] pNames, MethodParameter[] parameters, Optional<DelegatingMethodParameterCustomizer> optionalDelegatingMethodParameterCustomizer) {
public static MethodParameter[] customize(String[] pNames, MethodParameter[] parameters,
Optional<DelegatingMethodParameterCustomizer> optionalDelegatingMethodParameterCustomizer, boolean defaultFlatParamObject) {
List<MethodParameter> explodedParameters = new ArrayList<>();
for (int i = 0; i < parameters.length; ++i) {
MethodParameter p = parameters[i];
Expand All @@ -125,6 +128,22 @@ public static MethodParameter[] customize(String[] pNames, MethodParameter[] par
explodedParameters.add(methodParameter);
});
}
else if (defaultFlatParamObject) {
boolean isSimpleType = MethodParameterPojoExtractor.isSimpleType(paramClass);
boolean hasAnnotation = p.hasParameterAnnotations();
boolean shouldFlat = !isSimpleType && !hasAnnotation;
if (shouldFlat && !AbstractRequestService.isRequestTypeToIgnore(paramClass)) {
MethodParameterPojoExtractor.extractFrom(paramClass).forEach(methodParameter -> {
optionalDelegatingMethodParameterCustomizer
.ifPresent(customizer -> customizer.customize(p, methodParameter));
explodedParameters.add(methodParameter);
});
}
else {
String name = pNames != null ? pNames[i] : p.getParameterName();
explodedParameters.add(new DelegatingMethodParameter(p, name, null, false, false));
}
}
else {
String name = pNames != null ? pNames[i] : p.getParameterName();
explodedParameters.add(new DelegatingMethodParameter(p, name, null, false, false));
Expand Down
Expand Up @@ -30,6 +30,7 @@
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.nio.charset.Charset;
import java.time.Duration;
import java.time.LocalTime;
import java.util.ArrayList;
Expand Down Expand Up @@ -86,6 +87,7 @@ private MethodParameterPojoExtractor() {
SIMPLE_TYPES.add(OptionalDouble.class);
SIMPLE_TYPES.add(AtomicLong.class);
SIMPLE_TYPES.add(AtomicInteger.class);
SIMPLE_TYPES.add(Charset.class);

SIMPLE_TYPES.add(Map.class);
SIMPLE_TYPES.add(Iterable.class);
Expand Down
Expand Up @@ -181,6 +181,11 @@ public class SpringDocConfigProperties {
*/
private boolean showSpringCloudFunctions = true;

/**
* The param default flatten
*/
private boolean defaultFlatParamObject;

/**
* The model Converters
*/
Expand Down Expand Up @@ -226,6 +231,24 @@ public class SpringDocConfigProperties {
*/
private SortConverter sortConverter = new SortConverter();

/**
* Is default flat param object boolean.
*
* @return the boolean
*/
public boolean isDefaultFlatParamObject() {
return defaultFlatParamObject;
}

/**
* Sets default flat param object.
*
* @param defaultFlatParamObject the default flat param object
*/
public void setDefaultFlatParamObject(boolean defaultFlatParamObject) {
this.defaultFlatParamObject = defaultFlatParamObject;
}

/**
* Gets sort converter.
*
Expand Down
Expand Up @@ -172,6 +172,11 @@ public abstract class AbstractRequestService {
*/
private final Optional<List<ParameterCustomizer>> parameterCustomizers;

/**
* The Default flat param object.
*/
private final boolean defaultFlatParamObject;

/**
* Instantiates a new Abstract request builder.
*
Expand All @@ -191,6 +196,7 @@ protected AbstractRequestService(GenericParameterService parameterBuilder, Reque
parameterCustomizers.ifPresent(customizers -> customizers.removeIf(Objects::isNull));
this.parameterCustomizers = parameterCustomizers;
this.localSpringDocParameterNameDiscoverer = localSpringDocParameterNameDiscoverer;
this.defaultFlatParamObject = parameterBuilder.getPropertyResolverUtils().getSpringDocConfigProperties().isDefaultFlatParamObject();
}

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

/**
* Is default flat param object boolean.
*
* @return the boolean
*/
public boolean isDefaultFlatParamObject() {
return defaultFlatParamObject;
}
}
Expand Up @@ -210,4 +210,13 @@ private void resolveProperty(Supplier<String> getProperty, Consumer<String> setP
public ConfigurableBeanFactory getFactory() {
return factory;
}

/**
* Gets spring doc config properties.
*
* @return the spring doc config properties
*/
public SpringDocConfigProperties getSpringDocConfigProperties() {
return springDocConfigProperties;
}
}

0 comments on commit 3dce0c4

Please sign in to comment.