|
21 | 21 | * * * *
|
22 | 22 | * * *
|
23 | 23 | * *
|
24 |
| - * |
| 24 | + * |
25 | 25 | */
|
26 | 26 |
|
27 | 27 | package org.springdoc.core.service;
|
|
63 | 63 | import jakarta.validation.constraints.Min;
|
64 | 64 | import jakarta.validation.constraints.Pattern;
|
65 | 65 | import jakarta.validation.constraints.Size;
|
| 66 | +import org.apache.commons.lang3.ArrayUtils; |
66 | 67 | import org.apache.commons.lang3.StringUtils;
|
| 68 | +import org.jetbrains.annotations.NotNull; |
67 | 69 | import org.springdoc.core.customizers.ParameterCustomizer;
|
68 | 70 | import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
|
69 | 71 | import org.springdoc.core.extractor.DelegatingMethodParameter;
|
@@ -188,7 +190,7 @@ public abstract class AbstractRequestService {
|
188 | 190 | * @param localSpringDocParameterNameDiscoverer the local spring doc parameter name discoverer
|
189 | 191 | */
|
190 | 192 | protected AbstractRequestService(GenericParameterService parameterBuilder, RequestBodyService requestBodyService,
|
191 |
| - Optional<List<ParameterCustomizer>> parameterCustomizers, |
| 193 | + Optional<List<ParameterCustomizer>> parameterCustomizers, |
192 | 194 | SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
|
193 | 195 | super();
|
194 | 196 | this.parameterBuilder = parameterBuilder;
|
@@ -272,7 +274,7 @@ public static Collection<Parameter> getHeaders(MethodAttributes methodAttributes
|
272 | 274 | public Operation build(HandlerMethod handlerMethod, RequestMethod requestMethod,
|
273 | 275 | Operation operation, MethodAttributes methodAttributes, OpenAPI openAPI) {
|
274 | 276 | // Documentation
|
275 |
| - String operationId = operation.getOperationId()!=null ? operation.getOperationId() : handlerMethod.getMethod().getName(); |
| 277 | + String operationId = operation.getOperationId() != null ? operation.getOperationId() : handlerMethod.getMethod().getName(); |
276 | 278 | operation.setOperationId(operationId);
|
277 | 279 | // requests
|
278 | 280 | String[] pNames = this.localSpringDocParameterNameDiscoverer.getParameterNames(handlerMethod.getMethod());
|
@@ -322,7 +324,9 @@ public Operation build(HandlerMethod handlerMethod, RequestMethod requestMethod,
|
322 | 324 | parameter = buildParams(parameterInfo, components, requestMethod, methodAttributes, openAPI.getOpenapi());
|
323 | 325 | // Merge with the operation parameters
|
324 | 326 | parameter = GenericParameterService.mergeParameter(operationParameters, parameter);
|
325 |
| - List<Annotation> parameterAnnotations = Arrays.asList(methodParameter.getParameterAnnotations()); |
| 327 | + |
| 328 | + List<Annotation> parameterAnnotations = getParameterAnnotations(methodParameter); |
| 329 | + |
326 | 330 | if (isValidParameter(parameter)) {
|
327 | 331 | // Add param javadoc
|
328 | 332 | if (StringUtils.isBlank(parameter.getDescription()) && javadocProvider != null) {
|
@@ -371,6 +375,35 @@ else if (!RequestMethod.GET.equals(requestMethod) || OpenApiVersion.OPENAPI_3_1.
|
371 | 375 | return operation;
|
372 | 376 | }
|
373 | 377 |
|
| 378 | + /** |
| 379 | + * Gets parameter annotations. |
| 380 | + * |
| 381 | + * @param methodParameter the method parameter |
| 382 | + * @return the parameter annotations |
| 383 | + */ |
| 384 | + @NotNull |
| 385 | + private static List<Annotation> getParameterAnnotations(MethodParameter methodParameter) { |
| 386 | + // Initialize the list for parameter annotations |
| 387 | + List<Annotation> parameterAnnotations = new ArrayList<>(); |
| 388 | + // Add the parameter annotations (direct annotations) |
| 389 | + if (ArrayUtils.isNotEmpty(methodParameter.getParameterAnnotations())) { |
| 390 | + parameterAnnotations.addAll(Arrays.asList(methodParameter.getParameterAnnotations())); |
| 391 | + } |
| 392 | + // Separate list to store meta-annotations |
| 393 | + List<Annotation> metaAnnotationsList = new ArrayList<>(); |
| 394 | + // Iterate over the direct annotations and collect meta-annotations |
| 395 | + for (Annotation parameterAnnotation : parameterAnnotations) { |
| 396 | + Annotation[] metaAnnotations = parameterAnnotation.annotationType().getAnnotations(); |
| 397 | + |
| 398 | + if (ArrayUtils.isNotEmpty(metaAnnotations)) { |
| 399 | + metaAnnotationsList.addAll(Arrays.asList(metaAnnotations)); |
| 400 | + } |
| 401 | + } |
| 402 | + // Add all the collected meta-annotations to the main list |
| 403 | + parameterAnnotations.addAll(metaAnnotationsList); |
| 404 | + return parameterAnnotations; |
| 405 | + } |
| 406 | + |
374 | 407 | /**
|
375 | 408 | * Gets parameter linked hash map.
|
376 | 409 | *
|
|
0 commit comments