Skip to content

Commit 597b98c

Browse files
committed
IllegalStateException: Duplicate key when two endpoints at the same URL with same header exist. Fixes #1985.
1 parent 13064bc commit 597b98c

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,14 @@ private void fillParametersList(Operation operation, Map<String, String> queryPa
10471047
if (parametersList == null)
10481048
parametersList = new ArrayList<>();
10491049
Collection<Parameter> headersMap = AbstractRequestService.getHeaders(methodAttributes, new LinkedHashMap<>());
1050-
parametersList.addAll(headersMap);
1050+
headersMap.forEach(parameter -> {
1051+
Optional<Parameter> existingParam;
1052+
if (!CollectionUtils.isEmpty(operation.getParameters())){
1053+
existingParam = operation.getParameters().stream().filter(p -> parameter.getName().equals(p.getName())).findAny();
1054+
if (existingParam.isEmpty())
1055+
operation.addParametersItem(parameter);
1056+
}
1057+
});
10511058
if (!CollectionUtils.isEmpty(queryParams)) {
10521059
for (Map.Entry<String, String> entry : queryParams.entrySet()) {
10531060
io.swagger.v3.oas.models.parameters.Parameter parameter = new io.swagger.v3.oas.models.parameters.Parameter();

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/models/MethodAttributes.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import io.swagger.v3.oas.models.responses.ApiResponse;
3434
import io.swagger.v3.oas.models.responses.ApiResponses;
3535
import org.apache.commons.lang3.ArrayUtils;
36+
import org.apache.commons.lang3.StringUtils;
3637

3738
import org.springframework.core.annotation.AnnotatedElementUtils;
3839
import org.springframework.util.CollectionUtils;
@@ -387,9 +388,16 @@ public Map<String, String> getHeaders() {
387388
private void setHeaders(String[] headers) {
388389
if (ArrayUtils.isNotEmpty(headers))
389390
for (String header : headers) {
390-
String[] keyValueHeader = header.split("=");
391-
String headerValue = keyValueHeader.length > 1 ? keyValueHeader[1] : "";
392-
this.headers.put(keyValueHeader[0], headerValue);
391+
if (!header.contains("!=")) {
392+
String[] keyValueHeader = header.split("=");
393+
String headerValue = keyValueHeader.length > 1 ? keyValueHeader[1] : "";
394+
this.headers.put(keyValueHeader[0], headerValue);
395+
}
396+
else {
397+
String[] keyValueHeader = header.split("!=");
398+
if (!this.headers.containsKey(keyValueHeader[0]))
399+
this.headers.put(keyValueHeader[0], StringUtils.EMPTY);
400+
}
393401
}
394402
}
395403

0 commit comments

Comments
 (0)