Skip to content

Commit 777a56e

Browse files
author
Emanuel Moecklin
committed
fixes header field names being case-sensitive (they must be case-insensitive)
1 parent d9655fd commit 777a56e

File tree

4 files changed

+242
-34
lines changed

4 files changed

+242
-34
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ publishing {
4848
create<MavenPublication>("maven") {
4949
group = "com.1gravity"
5050
artifactId = "ktor-openapi-generator"
51-
version = "0.2-beta.17"
51+
version = "0.2-beta.20"
5252

5353
from(components["java"])
5454

src/main/kotlin/com/papsign/ktor/openapigen/annotations/mapping/OpenAPIName.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.papsign.ktor.openapigen.annotations.mapping
22

3+
import com.papsign.ktor.openapigen.annotations.parameters.HeaderParam
34
import java.util.*
45
import kotlin.reflect.KParameter
56
import kotlin.reflect.full.findAnnotation
@@ -10,7 +11,10 @@ annotation class OpenAPIName(val name: String)
1011
private val cache = Collections.synchronizedMap(HashMap<KParameter, String?>())
1112

1213
val KParameter.openAPIName: String?
13-
get() = cache.getOrPut(this) { findAnnotation<OpenAPIName>()?.name ?: name }
14+
get() = cache.getOrPut(this) {
15+
val caseSensitiveName = findAnnotation<OpenAPIName>()?.name ?: name
16+
if (findAnnotation<HeaderParam>() != null) caseSensitiveName?.toLowerCase() else caseSensitiveName
17+
}
1418

1519
fun <T> KParameter.remapOpenAPINames(map: Map<String, T>): Map<String, T> {
1620
val replace = this.openAPIName

src/main/kotlin/com/papsign/ktor/openapigen/parameters/handlers/ModularParameterHandler.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,14 @@ class ModularParameterHandler<T>(val parsers: Map<KParameter, Builder<*>>, val c
3030

3131
override fun parse(parameters: Parameters, headers: Headers): T {
3232
return constructor.callBy(parsers.mapValues {
33-
val value = it.value.build(it.key.name.toString(), it.key.remapOpenAPINames(parameters.toMap() + headers.toMap()))
33+
val headerMap = headers.toMap().entries
34+
.groupBy { entry -> entry.key.toLowerCase() }
35+
.mapValues { entry -> entry.value.flatMap { mapEntry -> mapEntry.value } }
36+
val value = it.value.build(
37+
it.key.name.toString(),
38+
it.key.remapOpenAPINames(parameters.toMap() + headerMap)
39+
)
40+
3441
if (value != null || it.key.type.isMarkedNullable) {
3542
value
3643
} else {

0 commit comments

Comments
 (0)