Skip to content

Commit 39fd721

Browse files
committed
All request headers marked as required for Java controllers in mixed projects in 2.0.3. Fixes #2187
1 parent c3de760 commit 39fd721

File tree

3 files changed

+49
-17
lines changed

3 files changed

+49
-17
lines changed

springdoc-openapi-kotlin/src/main/java/org/springdoc/kotlin/SpringDocKotlinConfiguration.kt

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
1414
import org.springframework.context.annotation.Bean
1515
import org.springframework.context.annotation.Configuration
1616
import org.springframework.context.annotation.Lazy
17+
import org.springframework.core.KotlinDetector
1718
import org.springframework.core.MethodParameter
1819
import org.springframework.core.annotation.AnnotatedElementUtils
1920
import org.springframework.web.bind.annotation.RequestParam
@@ -71,27 +72,30 @@ class SpringDocKotlinConfiguration(objectMapperProvider: ObjectMapperProvider) {
7172
matchIfMissing = true
7273
)
7374
@ConditionalOnMissingBean
74-
fun nullableKotlinRequestParameterCustomizer(): ParameterCustomizer {
75+
open fun nullableKotlinRequestParameterCustomizer(): ParameterCustomizer {
7576
return ParameterCustomizer { parameterModel, methodParameter ->
7677
if (parameterModel == null) return@ParameterCustomizer null
77-
val kParameter = methodParameter.toKParameter()
78-
if (kParameter != null) {
79-
val parameterDoc = AnnotatedElementUtils.findMergedAnnotation(
80-
AnnotatedElementUtils.forAnnotations(*methodParameter.parameterAnnotations),
81-
Parameter::class.java
82-
)
83-
val requestParam = AnnotatedElementUtils.findMergedAnnotation(
78+
if (KotlinDetector.isKotlinType(methodParameter.parameterType)) {
79+
val kParameter = methodParameter.toKParameter()
80+
if (kParameter != null) {
81+
val parameterDoc = AnnotatedElementUtils.findMergedAnnotation(
82+
AnnotatedElementUtils.forAnnotations(*methodParameter.parameterAnnotations),
83+
Parameter::class.java
84+
)
85+
val requestParam = AnnotatedElementUtils.findMergedAnnotation(
8486
AnnotatedElementUtils.forAnnotations(*methodParameter.parameterAnnotations),
8587
RequestParam::class.java
86-
)
87-
// Swagger @Parameter annotation takes precedence
88-
if (parameterDoc != null && parameterDoc.required)
89-
parameterModel.required = parameterDoc.required
90-
// parameter is not required if a default value is provided in @RequestParam
91-
else if (requestParam != null && ((requestParam.defaultValue != ValueConstants.DEFAULT_NONE) || !requestParam.required))
92-
parameterModel.required = false
93-
else
94-
parameterModel.required = kParameter.type.isMarkedNullable == false
88+
)
89+
// Swagger @Parameter annotation takes precedence
90+
if (parameterDoc != null && parameterDoc.required)
91+
parameterModel.required = parameterDoc.required
92+
// parameter is not required if a default value is provided in @RequestParam
93+
else if (requestParam != null && requestParam.defaultValue != ValueConstants.DEFAULT_NONE)
94+
parameterModel.required = false
95+
else
96+
parameterModel.required =
97+
kParameter.type.isMarkedNullable == false
98+
}
9599
}
96100
return@ParameterCustomizer parameterModel
97101
}

springdoc-openapi-kotlin/src/test/java/test/org/springdoc/api/app21/HelloController.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import org.springframework.http.MediaType;
77
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RequestHeader;
89
import org.springframework.web.bind.annotation.RequestMapping;
910
import org.springframework.web.bind.annotation.RequestParam;
1011
import org.springframework.web.bind.annotation.RestController;
@@ -17,4 +18,8 @@ public class HelloController {
1718
@GetMapping("/")
1819
public void greet(@RequestParam(required = false) @Parameter(required = false) final String name) {
1920
}
21+
22+
@GetMapping("/test2")
23+
public void greet1(@RequestHeader(required = false) @Parameter(required = false) final String name) {
24+
}
2025
}

springdoc-openapi-kotlin/src/test/resources/results/app21.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,29 @@
1111
}
1212
],
1313
"paths": {
14+
"/api/v2/test/test2": {
15+
"get": {
16+
"tags": [
17+
"Test"
18+
],
19+
"operationId": "greet1",
20+
"parameters": [
21+
{
22+
"name": "name",
23+
"in": "header",
24+
"required": false,
25+
"schema": {
26+
"type": "string"
27+
}
28+
}
29+
],
30+
"responses": {
31+
"200": {
32+
"description": "OK"
33+
}
34+
}
35+
}
36+
},
1437
"/api/v2/test/": {
1538
"get": {
1639
"tags": [

0 commit comments

Comments
 (0)