@@ -17,6 +17,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat
17
17
import org.springframework.context.annotation.Bean
18
18
import org.springframework.context.annotation.Configuration
19
19
import org.springframework.context.annotation.Lazy
20
+ import org.springframework.core.KotlinDetector
20
21
import org.springframework.core.MethodParameter
21
22
import org.springframework.core.annotation.AnnotatedElementUtils
22
23
import kotlin.coroutines.Continuation
@@ -35,6 +36,23 @@ import kotlin.reflect.jvm.kotlinFunction
35
36
@ConditionalOnWebApplication
36
37
@ConditionalOnBean(SpringDocConfiguration ::class )
37
38
open class SpringDocKotlinConfiguration (objectMapperProvider : ObjectMapperProvider ) {
39
+
40
+ /* *
41
+ * SpringDoc Kotlin Module Configuration
42
+ *
43
+ * @param objectMapperProvider Object Mapper Provider
44
+ * @return the nullable Kotlin Request Parameter Customizer
45
+ */
46
+ @Lazy(false )
47
+ @Configuration(proxyBeanMethods = false )
48
+ @ConditionalOnClass(KotlinModule ::class )
49
+ class SpringDocKotlinModuleConfiguration (objectMapperProvider : ObjectMapperProvider ) {
50
+ init {
51
+ objectMapperProvider.jsonMapper()
52
+ .registerModule(KotlinModule .Builder ().build())
53
+ }
54
+ }
55
+
38
56
/* *
39
57
* Instantiates a new Spring doc kotlin configuration.
40
58
*
@@ -74,17 +92,20 @@ open class SpringDocKotlinConfiguration(objectMapperProvider: ObjectMapperProvid
74
92
open fun nullableKotlinRequestParameterCustomizer (): ParameterCustomizer {
75
93
return ParameterCustomizer { parameterModel, methodParameter ->
76
94
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
- // Swagger @Parameter annotation takes precedence
84
- if (parameterDoc != null && parameterDoc.required)
85
- parameterModel.required = parameterDoc.required
86
- else
87
- parameterModel.required = kParameter.type.isMarkedNullable == false
95
+ if (KotlinDetector .isKotlinReflectPresent()) {
96
+ val kParameter = methodParameter.toKParameter()
97
+ if (kParameter != null ) {
98
+ val parameterDoc = AnnotatedElementUtils .findMergedAnnotation(
99
+ AnnotatedElementUtils .forAnnotations(* methodParameter.parameterAnnotations),
100
+ Parameter ::class .java
101
+ )
102
+ // Swagger @Parameter annotation takes precedence
103
+ if (parameterDoc != null && parameterDoc.required)
104
+ parameterModel.required = parameterDoc.required
105
+ else
106
+ parameterModel.required =
107
+ kParameter.type.isMarkedNullable == false
108
+ }
88
109
}
89
110
return @ParameterCustomizer parameterModel
90
111
}
@@ -99,19 +120,4 @@ open class SpringDocKotlinConfiguration(objectMapperProvider: ObjectMapperProvid
99
120
return kotlinFunction.parameters[parameterIndex + 1 ]
100
121
}
101
122
102
- /* *
103
- * SpringDoc Kotlin Module Configuration
104
- *
105
- * @param objectMapperProvider Object Mapper Provider
106
- * @return the nullable Kotlin Request Parameter Customizer
107
- */
108
- @Lazy(false )
109
- @Configuration(proxyBeanMethods = false )
110
- @ConditionalOnClass(KotlinModule ::class )
111
- class SpringDocKotlinModuleConfiguration (objectMapperProvider : ObjectMapperProvider ) {
112
- init {
113
- objectMapperProvider.jsonMapper()
114
- .registerModule(KotlinModule .Builder ().build())
115
- }
116
- }
117
123
}
0 commit comments