Skip to content

Commit d27acd9

Browse files
committed
IllegalStateException: Duplicate key when two endpoints at the same URL with same header exist. Fixes #1985.
1 parent 208882c commit d27acd9

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import io.swagger.v3.oas.models.Paths;
6767
import io.swagger.v3.oas.models.media.StringSchema;
6868
import io.swagger.v3.oas.models.parameters.Parameter;
69+
import io.swagger.v3.oas.models.parameters.PathParameter;
6970
import io.swagger.v3.oas.models.responses.ApiResponses;
7071
import io.swagger.v3.oas.models.servers.Server;
7172
import org.apache.commons.lang3.ArrayUtils;
@@ -1050,7 +1051,15 @@ private void fillParametersList(Operation operation, Map<String, String> queryPa
10501051
if (parametersList == null)
10511052
parametersList = new ArrayList<>();
10521053
Collection<Parameter> headersMap = AbstractRequestService.getHeaders(methodAttributes, new LinkedHashMap<>());
1053-
parametersList.addAll(headersMap);
1054+
headersMap.forEach(parameter -> {
1055+
Optional<Parameter> existingParam;
1056+
if (!CollectionUtils.isEmpty(operation.getParameters())){
1057+
existingParam = operation.getParameters().stream().filter(p -> parameter.getName().equals(p.getName())).findAny();
1058+
if (!existingParam.isPresent())
1059+
operation.addParametersItem(parameter);
1060+
}
1061+
});
1062+
10541063
if (!CollectionUtils.isEmpty(queryParams)) {
10551064
for (Map.Entry<String, String> entry : queryParams.entrySet()) {
10561065
io.swagger.v3.oas.models.parameters.Parameter parameter = new io.swagger.v3.oas.models.parameters.Parameter();

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import io.swagger.v3.oas.models.responses.ApiResponse;
3232
import io.swagger.v3.oas.models.responses.ApiResponses;
3333
import org.apache.commons.lang3.ArrayUtils;
34+
import org.apache.commons.lang3.StringUtils;
3435

3536
import org.springframework.core.annotation.AnnotatedElementUtils;
3637
import org.springframework.util.CollectionUtils;
@@ -385,9 +386,16 @@ public Map<String, String> getHeaders() {
385386
private void setHeaders(String[] headers) {
386387
if (ArrayUtils.isNotEmpty(headers))
387388
for (String header : headers) {
388-
String[] keyValueHeader = header.split("=");
389-
String headerValue = keyValueHeader.length > 1 ? keyValueHeader[1] : "";
390-
this.headers.put(keyValueHeader[0], headerValue);
389+
if (!header.contains("!=")) {
390+
String[] keyValueHeader = header.split("=");
391+
String headerValue = keyValueHeader.length > 1 ? keyValueHeader[1] : "";
392+
this.headers.put(keyValueHeader[0], headerValue);
393+
}
394+
else {
395+
String[] keyValueHeader = header.split("!=");
396+
if (!this.headers.containsKey(keyValueHeader[0]))
397+
this.headers.put(keyValueHeader[0], StringUtils.EMPTY);
398+
}
391399
}
392400
}
393401

0 commit comments

Comments
 (0)