Skip to content

Commit 1e21f28

Browse files
committed
Springdocs doesn't detect header declarations in class level @RequestMappings. Fixes #1073.
1 parent 653f2ee commit 1e21f28

File tree

6 files changed

+33
-6
lines changed

6 files changed

+33
-6
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ protected void calculatePath(HandlerMethod handlerMethod, RouterOperation router
359359
methodAttributes.setClassProduces(reqMappingClass.produces());
360360
}
361361

362+
methodAttributes.calculateHeadersForClass(method.getDeclaringClass());
362363
methodAttributes.calculateConsumesProduces(method);
363364

364365
Operation operation = (existingOperation != null) ? existingOperation : new Operation();

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,10 @@ private LinkedHashMap<String, Parameter> getParameterLinkedHashMap(Components co
320320
@SuppressWarnings("unchecked")
321321
public static Collection<Parameter> getHeaders(MethodAttributes methodAttributes, Map<String, Parameter> map) {
322322
for (Map.Entry<String, String> entry : methodAttributes.getHeaders().entrySet()) {
323-
Parameter parameter = new Parameter().in(ParameterIn.HEADER.toString()).name(entry.getKey()).schema(new StringSchema().addEnumItem(entry.getValue()));
323+
StringSchema schema = new StringSchema();
324+
if(StringUtils.isNotEmpty(entry.getValue()))
325+
schema.addEnumItem(entry.getValue());
326+
Parameter parameter = new Parameter().in(ParameterIn.HEADER.toString()).name(entry.getKey()).schema(schema);
324327
if (map.containsKey(entry.getKey())) {
325328
parameter = map.get(entry.getKey());
326329
if (StringUtils.isNotEmpty(entry.getValue()))

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,4 +408,16 @@ public boolean isWithResponseBodySchemaDoc() {
408408
public void setWithResponseBodySchemaDoc(boolean withResponseBodySchemaDoc) {
409409
this.withResponseBodySchemaDoc = withResponseBodySchemaDoc;
410410
}
411+
412+
/**
413+
* Calculate headers for class.
414+
*
415+
* @param declaringClass the declaring class
416+
*/
417+
public void calculateHeadersForClass(Class<?> declaringClass) {
418+
RequestMapping reqMappingClass = AnnotatedElementUtils.findMergedAnnotation(declaringClass, RequestMapping.class);
419+
if (reqMappingClass != null) {
420+
fillMethods(reqMappingClass.produces(), reqMappingClass.consumes(), reqMappingClass.headers());
421+
}
422+
}
411423
}

springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/app129/HelloController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.springframework.web.context.request.async.DeferredResult;
2929

3030
@RestController
31-
@RequestMapping("/api")
31+
@RequestMapping(path = "/api", headers = {"userId", "registrationId"})
3232
public class HelloController {
3333

3434
@GetMapping("/test")

springdoc-openapi-webmvc-core/src/test/resources/results/app129.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,20 @@
2525
"schema": {
2626
"$ref": "#/components/schemas/ActualReturnedEntity"
2727
}
28+
},
29+
{
30+
"name": "userId",
31+
"in": "header",
32+
"schema": {
33+
"type": "string"
34+
}
35+
},
36+
{
37+
"name": "registrationId",
38+
"in": "header",
39+
"schema": {
40+
"type": "string"
41+
}
2842
}
2943
],
3044
"responses": {

springdoc-openapi-webmvc-core/src/test/resources/results/app97.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@
2222
"name": "X-API-VERSION",
2323
"in": "header",
2424
"schema": {
25-
"type": "string",
26-
"enum": [
27-
""
28-
]
25+
"type": "string"
2926
}
3027
}
3128
],

0 commit comments

Comments
 (0)