From 96c06ce5290f729b2f3baf741f1b964e9f4cc2d0 Mon Sep 17 00:00:00 2001 From: Inaiat Date: Mon, 14 Sep 2020 10:08:32 -0300 Subject: [PATCH] fix npe when missing required field --- .../openapigen/exceptions/OpenAPIRequiredFieldException.kt | 3 +++ .../parameters/handlers/ModularParameterHandler.kt | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/com/papsign/ktor/openapigen/exceptions/OpenAPIRequiredFieldException.kt diff --git a/src/main/kotlin/com/papsign/ktor/openapigen/exceptions/OpenAPIRequiredFieldException.kt b/src/main/kotlin/com/papsign/ktor/openapigen/exceptions/OpenAPIRequiredFieldException.kt new file mode 100644 index 000000000..fb3d68914 --- /dev/null +++ b/src/main/kotlin/com/papsign/ktor/openapigen/exceptions/OpenAPIRequiredFieldException.kt @@ -0,0 +1,3 @@ +package com.papsign.ktor.openapigen.exceptions + +class OpenAPIRequiredFieldException (override val message: String) : Exception(message) \ No newline at end of file diff --git a/src/main/kotlin/com/papsign/ktor/openapigen/parameters/handlers/ModularParameterHandler.kt b/src/main/kotlin/com/papsign/ktor/openapigen/parameters/handlers/ModularParameterHandler.kt index 5a1237197..93a87e4f3 100644 --- a/src/main/kotlin/com/papsign/ktor/openapigen/parameters/handlers/ModularParameterHandler.kt +++ b/src/main/kotlin/com/papsign/ktor/openapigen/parameters/handlers/ModularParameterHandler.kt @@ -7,6 +7,7 @@ import com.papsign.ktor.openapigen.annotations.parameters.HeaderParam import com.papsign.ktor.openapigen.annotations.parameters.PathParam import com.papsign.ktor.openapigen.annotations.parameters.QueryParam import com.papsign.ktor.openapigen.annotations.parameters.apiParam +import com.papsign.ktor.openapigen.exceptions.OpenAPIRequiredFieldException import com.papsign.ktor.openapigen.model.operation.ParameterLocation import com.papsign.ktor.openapigen.model.operation.ParameterModel import com.papsign.ktor.openapigen.model.schema.SchemaModel @@ -26,7 +27,10 @@ class ModularParameterHandler(val parsers: Map>, val c ParameterHandler { override fun parse(parameters: Parameters, headers: Headers): T { - return constructor.callBy(parsers.mapValues { it.value.build(it.key.name.toString(), it.key.remapOpenAPINames(parameters.toMap() + headers.toMap())) }) + return constructor.callBy(parsers.mapValues { + it.value.build(it.key.name.toString(), it.key.remapOpenAPINames(parameters.toMap() + headers.toMap())) + ?: throw OpenAPIRequiredFieldException("""The field ${it.key.openAPIName ?: "unknow field"} is required""") + }) } override fun getParameters(apiGen: OpenAPIGen, provider: ModuleProvider<*>): List> {