diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestService.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestService.java index 87469e4ab..5df680f5a 100644 --- a/springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestService.java +++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestService.java @@ -334,7 +334,7 @@ else if (!RequestMethod.GET.equals(requestMethod)) { Entry entry = it.next(); Parameter parameter = entry.getValue(); if (!ParameterIn.PATH.toString().equals(parameter.getIn())) { - io.swagger.v3.oas.models.media.Schema itemSchema = new io.swagger.v3.oas.models.media.Schema<>() ; + io.swagger.v3.oas.models.media.Schema itemSchema = new io.swagger.v3.oas.models.media.Schema<>(); itemSchema.setName(entry.getKey()); itemSchema.setDescription(parameter.getDescription()); itemSchema.setDeprecated(parameter.getDeprecated()); @@ -398,7 +398,10 @@ public static Collection getHeaders(MethodAttributes methodAttributes Parameter parameter = new Parameter().in(ParameterIn.HEADER.toString()).name(entry.getKey()).schema(schema); if (map.containsKey(entry.getKey())) { parameter = map.get(entry.getKey()); - if (StringUtils.isNotEmpty(entry.getValue())) + List existingEnum = null; + if (parameter.getSchema() != null && !CollectionUtils.isEmpty(parameter.getSchema().getEnum())) + existingEnum = parameter.getSchema().getEnum(); + if (StringUtils.isNotEmpty(entry.getValue()) && (existingEnum==null || !existingEnum.contains(entry.getValue()))) parameter.getSchema().addEnumItemObject(entry.getValue()); parameter.setSchema(parameter.getSchema()); } diff --git a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app47/BasicController.java b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app47/BasicController.java new file mode 100644 index 000000000..0a509dbdd --- /dev/null +++ b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app47/BasicController.java @@ -0,0 +1,26 @@ +package test.org.springdoc.api.v30.app47; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(path = "/") +public class BasicController { + + @GetMapping(headers = {"foo=bar"}) + public String get1() { + return null; + } + + @GetMapping(headers = {"fi=ri"}) + public String get2() { + return null; + } + + @GetMapping( + headers = {"User-Agent=" + "MyUserAgent"}) + public String get3() { + return null; + } +} diff --git a/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app47.json b/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app47.json index 7239e937b..b683fac32 100644 --- a/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app47.json +++ b/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app47.json @@ -40,7 +40,60 @@ } } } + }, + "/": { + "get": { + "tags": [ + "basic-controller" + ], + "operationId": "get1_1_1", + "parameters": [ + { + "name": "foo", + "in": "header", + "schema": { + "type": "string", + "enum": [ + "bar" + ] + } + }, + { + "name": "fi", + "in": "header", + "schema": { + "type": "string", + "enum": [ + "ri" + ] + } + }, + { + "name": "User-Agent", + "in": "header", + "schema": { + "type": "string", + "enum": [ + "MyUserAgent" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + } + } + } + } } }, "components": {} } + \ No newline at end of file