Skip to content

Commit 296beed

Browse files
committed
Provide a better consistency for parameters and responses. Fixes #2888
1 parent 567d724 commit 296beed

File tree

19 files changed

+136
-127
lines changed

19 files changed

+136
-127
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/customizers/QuerydslPredicateOperationCustomizer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.ArrayList;
3333
import java.util.Arrays;
3434
import java.util.Collections;
35+
import java.util.LinkedHashSet;
3536
import java.util.List;
3637
import java.util.Map;
3738
import java.util.Optional;
@@ -112,7 +113,7 @@ public Operation customize(Operation operation, HandlerMethod handlerMethod) {
112113

113114
QuerydslBindings bindings = extractQdslBindings(predicate);
114115

115-
Set<String> fieldsToAdd = Arrays.stream(predicate.root().getDeclaredFields()).filter(field -> !Modifier.isStatic(field.getModifiers())).map(Field::getName).collect(Collectors.toSet());
116+
Set<String> fieldsToAdd = Arrays.stream(predicate.root().getDeclaredFields()).filter(field -> !Modifier.isStatic(field.getModifiers())).map(Field::getName).collect(Collectors.toCollection(LinkedHashSet::new));
116117

117118
Map<String, Object> pathSpecMap = getPathSpec(bindings, "pathSpecs");
118119
//remove blacklisted fields

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import java.util.Arrays;
3030
import java.util.LinkedHashMap;
31+
import java.util.LinkedHashSet;
3132
import java.util.List;
3233
import java.util.Locale;
3334
import java.util.Map;
@@ -178,15 +179,15 @@ private void buildRouterOperationList(List<RouterOperation> routerOperationList,
178179
if (andCheck(resourceMetadata != null, !controllerType.equals(ControllerType.SEARCH))) {
179180
HttpMethods httpMethodsItem = resourceMetadata.getSupportedHttpMethods().getMethodsFor(ResourceType.ITEM);
180181
requestMethodsItem = requestMethods.stream().filter(requestMethod -> httpMethodsItem.contains(HttpMethod.valueOf(requestMethod.toString())))
181-
.collect(Collectors.toSet());
182+
.collect(Collectors.toCollection(LinkedHashSet::new));
182183

183184
buildRouterOperation(routerOperationList, resourceMetadata, dataRestRepository, openAPI, path,
184185
subPath, controllerType, methodResourceMapping, requestMappingInfo, handlerMethod, requestMethodsItem, ResourceType.ITEM);
185186

186187
if (!ControllerType.PROPERTY.equals(controllerType)) {
187188
HttpMethods httpMethodsCollection = resourceMetadata.getSupportedHttpMethods().getMethodsFor(ResourceType.COLLECTION);
188189
requestMethodsCollection = requestMethods.stream().filter(requestMethod -> httpMethodsCollection.contains(HttpMethod.valueOf(requestMethod.toString())))
189-
.collect(Collectors.toSet());
190+
.collect(Collectors.toCollection(LinkedHashSet::new));
190191

191192
buildRouterOperation(routerOperationList, resourceMetadata, dataRestRepository, openAPI, path,
192193
subPath, controllerType, methodResourceMapping, requestMappingInfo, handlerMethod, requestMethodsCollection, ResourceType.COLLECTION);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import java.util.Arrays;
4141
import java.util.Collection;
4242
import java.util.HashSet;
43+
import java.util.LinkedHashSet;
4344
import java.util.List;
4445
import java.util.Map;
4546
import java.util.Objects;
@@ -361,7 +362,7 @@ private static boolean isNullable(Annotation[] fieldAnnotations) {
361362
Collection<String> annotationSimpleNames = Arrays.stream(fieldAnnotations)
362363
.map(Annotation::annotationType)
363364
.map(Class::getSimpleName)
364-
.collect(Collectors.toSet());
365+
.collect(Collectors.toCollection(LinkedHashSet::new));
365366
return !hasNotNullAnnotation(annotationSimpleNames);
366367
}
367368
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
package org.springdoc.core.properties;
2828

2929
import java.io.IOException;
30+
import java.util.LinkedHashSet;
3031
import java.util.Properties;
3132
import java.util.Set;
3233
import java.util.stream.Collectors;
@@ -239,7 +240,7 @@ public void setSyntaxHighlight(SyntaxHighlight syntaxHighlight) {
239240
* @return the set
240241
*/
241242
public Set<SwaggerUrl> cloneUrls() {
242-
return this.urls.stream().map(swaggerUrl -> new SwaggerUrl(swaggerUrl.getName(), swaggerUrl.getUrl(), swaggerUrl.getDisplayName())).collect(Collectors.toSet());
243+
return this.urls.stream().map(swaggerUrl -> new SwaggerUrl(swaggerUrl.getName(), swaggerUrl.getUrl(), swaggerUrl.getDisplayName())).collect(Collectors.toCollection(LinkedHashSet::new));
243244
}
244245

245246
/**

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.Collection;
3737
import java.util.HashSet;
3838
import java.util.LinkedHashMap;
39+
import java.util.LinkedHashSet;
3940
import java.util.List;
4041
import java.util.Locale;
4142
import java.util.Map;
@@ -489,12 +490,12 @@ public Set<io.swagger.v3.oas.annotations.responses.ApiResponse> getApiResponses(
489490
Set<io.swagger.v3.oas.annotations.responses.ApiResponses> apiResponsesDoc = AnnotatedElementUtils
490491
.findAllMergedAnnotations(method, io.swagger.v3.oas.annotations.responses.ApiResponses.class);
491492
Set<io.swagger.v3.oas.annotations.responses.ApiResponse> responses = apiResponsesDoc.stream()
492-
.flatMap(x -> Stream.of(x.value())).collect(Collectors.toSet());
493+
.flatMap(x -> Stream.of(x.value())).collect(Collectors.toCollection(LinkedHashSet::new));
493494

494495
Set<io.swagger.v3.oas.annotations.responses.ApiResponses> apiResponsesDocDeclaringClass = AnnotatedElementUtils
495496
.findAllMergedAnnotations(declaringClass, io.swagger.v3.oas.annotations.responses.ApiResponses.class);
496497
responses.addAll(
497-
apiResponsesDocDeclaringClass.stream().flatMap(x -> Stream.of(x.value())).collect(Collectors.toSet()));
498+
apiResponsesDocDeclaringClass.stream().flatMap(x -> Stream.of(x.value())).collect(Collectors.toCollection(LinkedHashSet::new)));
498499

499500
Set<io.swagger.v3.oas.annotations.responses.ApiResponse> apiResponseDoc = AnnotatedElementUtils
500501
.findMergedRepeatableAnnotations(method, io.swagger.v3.oas.annotations.responses.ApiResponse.class);

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.HashMap;
3434
import java.util.HashSet;
3535
import java.util.LinkedHashMap;
36+
import java.util.LinkedHashSet;
3637
import java.util.List;
3738
import java.util.Locale;
3839
import java.util.Map;
@@ -336,7 +337,7 @@ public Operation buildTags(HandlerMethod handlerMethod, Operation operation, Ope
336337
if (!CollectionUtils.isEmpty(tagsStr))
337338
tagsStr = tagsStr.stream()
338339
.map(str -> propertyResolverUtils.resolve(str, locale))
339-
.collect(Collectors.toSet());
340+
.collect(Collectors.toCollection(LinkedHashSet::new));
340341

341342
if (springdocTags.containsKey(handlerMethod)) {
342343
io.swagger.v3.oas.models.tags.Tag tag = springdocTags.get(handlerMethod);
@@ -407,10 +408,10 @@ private void buildTagsFromMethod(Method method, Set<io.swagger.v3.oas.models.tag
407408
Set<Tags> tagsSet = AnnotatedElementUtils
408409
.findAllMergedAnnotations(method, Tags.class);
409410
Set<Tag> methodTags = tagsSet.stream()
410-
.flatMap(x -> Stream.of(x.value())).collect(Collectors.toSet());
411+
.flatMap(x -> Stream.of(x.value())).collect(Collectors.toCollection(LinkedHashSet::new));
411412
methodTags.addAll(AnnotatedElementUtils.findAllMergedAnnotations(method, Tag.class));
412413
if (!CollectionUtils.isEmpty(methodTags)) {
413-
tagsStr.addAll(methodTags.stream().map(tag -> propertyResolverUtils.resolve(tag.name(), locale)).collect(Collectors.toSet()));
414+
tagsStr.addAll(methodTags.stream().map(tag -> propertyResolverUtils.resolve(tag.name(), locale)).collect(Collectors.toCollection(LinkedHashSet::new)));
414415
List<Tag> allTags = new ArrayList<>(methodTags);
415416
addTags(allTags, tags, locale);
416417
}
@@ -450,10 +451,10 @@ public void buildTagsFromClass(Class<?> beanType, Set<io.swagger.v3.oas.models.t
450451
Set<Tags> tagsSet = AnnotatedElementUtils
451452
.findAllMergedAnnotations(beanType, Tags.class);
452453
Set<Tag> classTags = tagsSet.stream()
453-
.flatMap(x -> Stream.of(x.value())).collect(Collectors.toSet());
454+
.flatMap(x -> Stream.of(x.value())).collect(Collectors.toCollection(LinkedHashSet::new));
454455
classTags.addAll(AnnotatedElementUtils.findAllMergedAnnotations(beanType, Tag.class));
455456
if (!CollectionUtils.isEmpty(classTags)) {
456-
tagsStr.addAll(classTags.stream().map(tag -> propertyResolverUtils.resolve(tag.name(), locale)).collect(Collectors.toSet()));
457+
tagsStr.addAll(classTags.stream().map(tag -> propertyResolverUtils.resolve(tag.name(), locale)).collect(Collectors.toCollection(LinkedHashSet::new)));
457458
allTags.addAll(classTags);
458459
addTags(allTags, tags, locale);
459460
}

springdoc-openapi-starter-webflux-api/src/main/java/org/springdoc/webflux/core/providers/SpringWebFluxProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import java.util.Collection;
2929
import java.util.LinkedHashMap;
30+
import java.util.LinkedHashSet;
3031
import java.util.Map;
3132
import java.util.Map.Entry;
3233
import java.util.Set;
@@ -84,7 +85,7 @@ public Set<String> getActivePatterns(Object requestMapping) {
8485
RequestMappingInfo requestMappingInfo = (RequestMappingInfo) requestMapping;
8586
PatternsRequestCondition patternsRequestCondition = requestMappingInfo.getPatternsCondition();
8687
return patternsRequestCondition.getPatterns().stream()
87-
.map(PathPattern::getPatternString).collect(Collectors.toSet());
88+
.map(PathPattern::getPatternString).collect(Collectors.toCollection(LinkedHashSet::new));
8889
}
8990

9091

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app233/SpringDocApp233Test.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
package test.org.springdoc.api.v30.app233;
2828

2929
import java.util.Collection;
30+
import java.util.LinkedHashSet;
3031
import java.util.List;
3132
import java.util.Optional;
3233
import java.util.Set;
@@ -167,7 +168,7 @@ private void verifySwaggerFieldRequirementsMatchJavaValidation(Collection<String
167168
.stream()
168169
.flatMap(Collection::stream)
169170
.map(field -> field.getObjectName() + "." + field.getField())
170-
.collect(Collectors.toSet());
171+
.collect(Collectors.toCollection(LinkedHashSet::new));
171172

172173

173174
assertThat(errorFields).containsExactlyElementsOf(expectedErrorFields);

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app233/SpringDocApp233Test.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
package test.org.springdoc.api.v31.app233;
2828

2929
import java.util.Collection;
30+
import java.util.LinkedHashSet;
3031
import java.util.List;
3132
import java.util.Optional;
3233
import java.util.Set;
@@ -167,7 +168,7 @@ private void verifySwaggerFieldRequirementsMatchJavaValidation(Collection<String
167168
.stream()
168169
.flatMap(Collection::stream)
169170
.map(field -> field.getObjectName() + "." + field.getField())
170-
.collect(Collectors.toSet());
171+
.collect(Collectors.toCollection(LinkedHashSet::new));
171172

172173

173174
assertThat(errorFields).containsExactlyElementsOf(expectedErrorFields);

springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app126.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@
2020
"description": "Get all currencies",
2121
"operationId": "getAllCurrencies",
2222
"responses": {
23-
"401": {
24-
"$ref": "#/components/responses/http401NoToken"
25-
},
26-
"403": {
27-
"$ref": "#/components/responses/http403"
28-
},
2923
"200": {
3024
"description": "All currencies returned",
3125
"content": {
@@ -38,6 +32,12 @@
3832
}
3933
}
4034
}
35+
},
36+
"401": {
37+
"$ref": "#/components/responses/http401BadToken"
38+
},
39+
"403": {
40+
"$ref": "#/components/responses/http403"
4141
}
4242
}
4343
}

0 commit comments

Comments
 (0)