From b7b281057a91344b6090ea84cc18548e60eb2bc8 Mon Sep 17 00:00:00 2001 From: NaccOll Date: Sat, 1 Jul 2023 13:27:29 +0800 Subject: [PATCH] fix: https://github.com/springdoc/springdoc-openapi/issues/2282 --- .../extractor/DelegatingMethodParameter.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/extractor/DelegatingMethodParameter.java b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/extractor/DelegatingMethodParameter.java index 9d73b58b7..39a067064 100644 --- a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/extractor/DelegatingMethodParameter.java +++ b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/extractor/DelegatingMethodParameter.java @@ -51,6 +51,8 @@ import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestPart; /** * The type Delegating method parameter. @@ -128,12 +130,24 @@ public static MethodParameter[] customize(String[] pNames, MethodParameter[] par explodedParameters.add(methodParameter); }); } - else if (defaultFlatParamObject && !MethodParameterPojoExtractor.isSimpleType(paramClass) && !AbstractRequestService.isRequestTypeToIgnore(paramClass)) { - MethodParameterPojoExtractor.extractFrom(paramClass).forEach(methodParameter -> { - optionalDelegatingMethodParameterCustomizer - .ifPresent(customizer -> customizer.customize(p, methodParameter)); - explodedParameters.add(methodParameter); - }); + else if (defaultFlatParamObject) { + boolean isSimpleType = MethodParameterPojoExtractor.isSimpleType(paramClass); + List annotations = Arrays.stream(p.getParameterAnnotations()) + .filter(annotation -> Arrays.asList(RequestBody.class, RequestPart.class).contains(annotation.getClass())) + .toList(); + boolean hasAnnotation = !annotations.isEmpty(); + 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();