From 80ecb27dea489d21bf4eb3db6ed48719bc0d2cff Mon Sep 17 00:00:00 2001 From: koenlavooij Date: Wed, 26 Mar 2025 12:21:56 +0100 Subject: [PATCH 1/4] Fix for problems when a nullable parameter has a default value When a default value is present the parameter is moved to non-nullable. This works because we could replace the null with a default value. This will actually set the default value. --- .../kotlin-server/libraries/javalin5/pathParams.mustache | 2 +- .../kotlin-server/libraries/javalin5/queryParams.mustache | 2 +- .../kotlin-server/libraries/javalin6/pathParams.mustache | 2 +- .../kotlin-server/libraries/javalin6/queryParams.mustache | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/pathParams.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/pathParams.mustache index 4f1cfe9bfc7b..9532da35dd21 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/pathParams.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/pathParams.mustache @@ -1 +1 @@ -{{#isPathParam}}ctx.pathParamAsClass<{{{dataType}}}>("{{baseName}}").get(){{/isPathParam}} \ No newline at end of file +{{#isPathParam}}ctx.pathParamAsClass<{{{dataType}}}>("{{baseName}}").get(){{>paramDefault}}{{/isPathParam}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/queryParams.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/queryParams.mustache index 5fa2906d6545..fe4a4c7d80b1 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/queryParams.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/queryParams.mustache @@ -1 +1 @@ -{{#isQueryParam}}{{#isArray}}ctx.queryParams("{{baseName}}"){{/isArray}}{{^isArray}}ctx.queryParamAsClass("{{baseName}}").get(){{/isArray}}{{/isQueryParam}} \ No newline at end of file +{{#isQueryParam}}{{#isArray}}ctx.queryParams("{{baseName}}"){{/isArray}}{{^isArray}}ctx.queryParamAsClass("{{baseName}}").get(){{>paramDefault}}{{/isArray}}{{/isQueryParam}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/pathParams.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/pathParams.mustache index 4f1cfe9bfc7b..9532da35dd21 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/pathParams.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/pathParams.mustache @@ -1 +1 @@ -{{#isPathParam}}ctx.pathParamAsClass<{{{dataType}}}>("{{baseName}}").get(){{/isPathParam}} \ No newline at end of file +{{#isPathParam}}ctx.pathParamAsClass<{{{dataType}}}>("{{baseName}}").get(){{>paramDefault}}{{/isPathParam}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/queryParams.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/queryParams.mustache index 157e39c97787..fb9aa3fbdeee 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/queryParams.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/queryParams.mustache @@ -1 +1 @@ -{{#isQueryParam}}{{#isArray}}ctx.queryParams("{{baseName}}"){{/isArray}}{{^isArray}}ctx.queryParamAsClass<{{{dataType}}}>("{{baseName}}"){{^required}}.allowNullable(){{/required}}.get(){{/isArray}}{{/isQueryParam}} \ No newline at end of file +{{#isQueryParam}}{{#isArray}}ctx.queryParams("{{baseName}}"){{/isArray}}{{^isArray}}ctx.queryParamAsClass<{{{dataType}}}>("{{baseName}}"){{^required}}.allowNullable(){{/required}}.get(){{>paramDefault}}{{/isArray}}{{/isQueryParam}} \ No newline at end of file From 13ab6534ac6ac77567b210a2c6e79541e4fca64d Mon Sep 17 00:00:00 2001 From: koenlavooij Date: Wed, 26 Mar 2025 12:27:28 +0100 Subject: [PATCH 2/4] Adds (optional) validation to the beans. Option to set: `useBeanValidation` to `true`. This will insert validation rules from the `jakarta.validation` package much like it does with the spring generator. Aso sneaked in `JsonProperty` annotations in order to more formally adhere to the name in the spec as opposed to configuring ObjectMappers in order to translate names to match the spec. --- .../javalin5/beanValidation.mustache | 4 ++ .../javalin5/beanValidationModel.mustache | 38 +++++++++++++++++++ .../javalin5/data_class_opt_var.mustache | 6 +++ .../javalin5/data_class_req_var.mustache | 6 +++ .../libraries/javalin5/paramDefault.mustache | 2 + .../javalin6/beanValidation.mustache | 4 ++ .../javalin6/beanValidationModel.mustache | 38 +++++++++++++++++++ .../javalin6/data_class_opt_var.mustache | 6 +++ .../javalin6/data_class_req_var.mustache | 6 +++ .../libraries/javalin6/paramDefault.mustache | 2 + 10 files changed, 112 insertions(+) create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidation.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidationModel.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_opt_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_req_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/paramDefault.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidation.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidationModel.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_opt_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_req_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/paramDefault.mustache diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidation.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidation.mustache new file mode 100644 index 000000000000..952ed087d3a2 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidation.mustache @@ -0,0 +1,4 @@ +{{#isContainer}}{{^isPrimitiveType}}{{^isEnum}} + @field:jakarta.validation.Valid{{/isEnum}}{{/isPrimitiveType}}{{/isContainer}}{{! +}}{{^isContainer}}{{^isPrimitiveType}}{{^isNumber}}{{^isUuid}}{{^isDateTime}} + @field:jakarta.validation.Valid{{/isDateTime}}{{/isUuid}}{{/isNumber}}{{/isPrimitiveType}}{{/isContainer}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidationModel.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidationModel.mustache new file mode 100644 index 000000000000..d29663cfd4cb --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/beanValidationModel.mustache @@ -0,0 +1,38 @@ +{{! +format: email +}}{{#isEmail}} + @field:jakarta.validation.constraints.Email{{/isEmail}}{{! +pattern set +}}{{#pattern}} + @field:jakarta.validation.constraints.Pattern(regexp="{{{pattern}}}"{{#vendorExtensions.x-pattern-message}}, message="{{vendorExtensions.x-pattern-message}}"{{/vendorExtensions.x-pattern-message}}){{/pattern}}{{! +minLength && maxLength set +}}{{#minLength}}{{#maxLength}} + @field:jakarta.validation.constraints.Size(min={{minLength}},max={{maxLength}}){{/maxLength}}{{/minLength}}{{! +minLength set, maxLength not +}}{{#minLength}}{{^maxLength}} + @field:jakarta.validation.constraints.Size(min={{minLength}}){{/maxLength}}{{/minLength}}{{! +minLength not set, maxLength set +}}{{^minLength}}{{#maxLength}} + @field:jakarta.validation.constraints.Size(max={{.}}){{/maxLength}}{{/minLength}}{{! +@Size: minItems && maxItems set +}}{{#minItems}}{{#maxItems}} + @field:jakarta.validation.constraints.Size(min={{minItems}},max={{maxItems}}) {{/maxItems}}{{/minItems}}{{! +@Size: minItems set, maxItems not +}}{{#minItems}}{{^maxItems}} + @field:jakarta.validation.constraints.Size(min={{minItems}}){{/maxItems}}{{/minItems}}{{! +@Size: minItems not set && maxItems set +}}{{^minItems}}{{#maxItems}} + @field:jakarta.validation.constraints.Size(max={{.}}){{/maxItems}}{{/minItems}}{{! +check for integer or long / all others=decimal type with @Decimal* +isInteger set +}}{{#isInteger}}{{#minimum}} + @field:jakarta.validation.constraints.Min({{.}}){{/minimum}}{{#maximum}} + @field:jakarta.validation.constraints.Max({{.}}){{/maximum}}{{/isInteger}}{{! +isLong set +}}{{#isLong}}{{#minimum}} + @field:jakarta.validation.constraints.Min({{.}}L){{/minimum}}{{#maximum}} + @field:jakarta.validation.constraints.Max({{.}}L){{/maximum}}{{/isLong}}{{! +Not Integer, not Long => we have a decimal value! +}}{{^isInteger}}{{^isLong}}{{#minimum}} + @field:jakarta.validation.constraints.DecimalMin("{{.}}"){{/minimum}}{{#maximum}} + @field:jakarta.validation.constraints.DecimalMax("{{.}}"){{/maximum}}{{/isLong}}{{/isInteger}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_opt_var.mustache new file mode 100644 index 000000000000..cb3003185ab1 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_opt_var.mustache @@ -0,0 +1,6 @@ +{{#description}} + /* {{{.}}} */ +{{/description}} + {{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}} + @field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}") + {{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_req_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_req_var.mustache new file mode 100644 index 000000000000..59f331fdef6b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_req_var.mustache @@ -0,0 +1,6 @@ +{{#description}} + /* {{{.}}} */ +{{/description}} + {{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}} + @field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}") + {{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/paramDefault.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/paramDefault.mustache new file mode 100644 index 000000000000..dd5fc214c553 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/paramDefault.mustache @@ -0,0 +1,2 @@ +{{#defaultValue}} ?:{{#isInteger}}{{{defaultValue}}}{{/isInteger}}{{#isLong}}{{{defaultValue}}}L{{/isLong}}{{#isShort}}{{{defaultValue}}}.toShort(){{/isShort}}{{#isDouble}}{{{defaultValue}}}.toDouble(){{/isDouble}}{{#isFloat}}{{{defaultValue}}}f{{/isFloat}}{{#isEnum}}{{{dataType}}}.valueOf("{{{defaultValue}}}"){{/isEnum}}{{#isBoolean}}{{{defaultValue}}}{{/isBoolean}}{{#isString}}"{{{defaultValue}}}"{{/isString}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}} +{{/defaultValue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidation.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidation.mustache new file mode 100644 index 000000000000..952ed087d3a2 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidation.mustache @@ -0,0 +1,4 @@ +{{#isContainer}}{{^isPrimitiveType}}{{^isEnum}} + @field:jakarta.validation.Valid{{/isEnum}}{{/isPrimitiveType}}{{/isContainer}}{{! +}}{{^isContainer}}{{^isPrimitiveType}}{{^isNumber}}{{^isUuid}}{{^isDateTime}} + @field:jakarta.validation.Valid{{/isDateTime}}{{/isUuid}}{{/isNumber}}{{/isPrimitiveType}}{{/isContainer}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidationModel.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidationModel.mustache new file mode 100644 index 000000000000..d29663cfd4cb --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/beanValidationModel.mustache @@ -0,0 +1,38 @@ +{{! +format: email +}}{{#isEmail}} + @field:jakarta.validation.constraints.Email{{/isEmail}}{{! +pattern set +}}{{#pattern}} + @field:jakarta.validation.constraints.Pattern(regexp="{{{pattern}}}"{{#vendorExtensions.x-pattern-message}}, message="{{vendorExtensions.x-pattern-message}}"{{/vendorExtensions.x-pattern-message}}){{/pattern}}{{! +minLength && maxLength set +}}{{#minLength}}{{#maxLength}} + @field:jakarta.validation.constraints.Size(min={{minLength}},max={{maxLength}}){{/maxLength}}{{/minLength}}{{! +minLength set, maxLength not +}}{{#minLength}}{{^maxLength}} + @field:jakarta.validation.constraints.Size(min={{minLength}}){{/maxLength}}{{/minLength}}{{! +minLength not set, maxLength set +}}{{^minLength}}{{#maxLength}} + @field:jakarta.validation.constraints.Size(max={{.}}){{/maxLength}}{{/minLength}}{{! +@Size: minItems && maxItems set +}}{{#minItems}}{{#maxItems}} + @field:jakarta.validation.constraints.Size(min={{minItems}},max={{maxItems}}) {{/maxItems}}{{/minItems}}{{! +@Size: minItems set, maxItems not +}}{{#minItems}}{{^maxItems}} + @field:jakarta.validation.constraints.Size(min={{minItems}}){{/maxItems}}{{/minItems}}{{! +@Size: minItems not set && maxItems set +}}{{^minItems}}{{#maxItems}} + @field:jakarta.validation.constraints.Size(max={{.}}){{/maxItems}}{{/minItems}}{{! +check for integer or long / all others=decimal type with @Decimal* +isInteger set +}}{{#isInteger}}{{#minimum}} + @field:jakarta.validation.constraints.Min({{.}}){{/minimum}}{{#maximum}} + @field:jakarta.validation.constraints.Max({{.}}){{/maximum}}{{/isInteger}}{{! +isLong set +}}{{#isLong}}{{#minimum}} + @field:jakarta.validation.constraints.Min({{.}}L){{/minimum}}{{#maximum}} + @field:jakarta.validation.constraints.Max({{.}}L){{/maximum}}{{/isLong}}{{! +Not Integer, not Long => we have a decimal value! +}}{{^isInteger}}{{^isLong}}{{#minimum}} + @field:jakarta.validation.constraints.DecimalMin("{{.}}"){{/minimum}}{{#maximum}} + @field:jakarta.validation.constraints.DecimalMax("{{.}}"){{/maximum}}{{/isLong}}{{/isInteger}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_opt_var.mustache new file mode 100644 index 000000000000..cb3003185ab1 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_opt_var.mustache @@ -0,0 +1,6 @@ +{{#description}} + /* {{{.}}} */ +{{/description}} + {{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}} + @field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}") + {{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_req_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_req_var.mustache new file mode 100644 index 000000000000..59f331fdef6b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_req_var.mustache @@ -0,0 +1,6 @@ +{{#description}} + /* {{{.}}} */ +{{/description}} + {{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}} + @field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}") + {{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/paramDefault.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/paramDefault.mustache new file mode 100644 index 000000000000..dd5fc214c553 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/paramDefault.mustache @@ -0,0 +1,2 @@ +{{#defaultValue}} ?:{{#isInteger}}{{{defaultValue}}}{{/isInteger}}{{#isLong}}{{{defaultValue}}}L{{/isLong}}{{#isShort}}{{{defaultValue}}}.toShort(){{/isShort}}{{#isDouble}}{{{defaultValue}}}.toDouble(){{/isDouble}}{{#isFloat}}{{{defaultValue}}}f{{/isFloat}}{{#isEnum}}{{{dataType}}}.valueOf("{{{defaultValue}}}"){{/isEnum}}{{#isBoolean}}{{{defaultValue}}}{{/isBoolean}}{{#isString}}"{{{defaultValue}}}"{{/isString}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}}{{#isUuid}}"UUID.fromString({{{defaultValue}}})"{{/isUuid}} +{{/defaultValue}} \ No newline at end of file From d16b7a4d333a4ff12c0ed010c22c8e6c142f7b70 Mon Sep 17 00:00:00 2001 From: koenlavooij Date: Thu, 27 Mar 2025 14:06:06 +0100 Subject: [PATCH 3/4] Update samples --- .../kotlin/org/openapitools/server/models/Pet.kt | 8 ++++++++ .../org/openapitools/server/models/Category.kt | 4 ++++ .../server/models/ModelApiResponse.kt | 6 ++++++ .../org/openapitools/server/models/Order.kt | 12 ++++++++++++ .../kotlin/org/openapitools/server/models/Pet.kt | 12 ++++++++++++ .../kotlin/org/openapitools/server/models/Tag.kt | 4 ++++ .../org/openapitools/server/models/User.kt | 16 ++++++++++++++++ .../org/openapitools/server/models/Category.kt | 4 ++++ .../server/models/ModelApiResponse.kt | 6 ++++++ .../org/openapitools/server/models/Order.kt | 12 ++++++++++++ .../kotlin/org/openapitools/server/models/Pet.kt | 12 ++++++++++++ .../kotlin/org/openapitools/server/models/Tag.kt | 4 ++++ .../org/openapitools/server/models/User.kt | 16 ++++++++++++++++ 13 files changed, 116 insertions(+) diff --git a/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt index 072781fb8b9c..e8356ace1376 100644 --- a/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -20,9 +20,17 @@ package org.openapitools.server.models * @param notNullableNotRequired */ data class Pet( + + @field:com.fasterxml.jackson.annotation.JsonProperty("notNullable_required") val notNullableRequired: kotlin.String, + + @field:com.fasterxml.jackson.annotation.JsonProperty("nullable_required") val nullableRequired: kotlin.String?, + + @field:com.fasterxml.jackson.annotation.JsonProperty("nullable_notRequired") val nullableNotRequired: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("notNullable_notRequired") val notNullableNotRequired: kotlin.String? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt index 852f443a304c..fcd1e6e2268d 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -18,7 +18,11 @@ package org.openapitools.server.models * @param name */ data class Category( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("name") val name: kotlin.String? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 94b9ddf7b92e..8d0bcd12a7ea 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -19,8 +19,14 @@ package org.openapitools.server.models * @param message */ data class ModelApiResponse( + + @field:com.fasterxml.jackson.annotation.JsonProperty("code") val code: kotlin.Int? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("type") val type: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("message") val message: kotlin.String? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt index 48c1ef32bd34..39340c4f9928 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -22,12 +22,24 @@ package org.openapitools.server.models * @param complete */ data class Order( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("petId") val petId: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("quantity") val quantity: kotlin.Int? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("shipDate") val shipDate: java.time.OffsetDateTime? = null, /* Order Status */ + + @field:com.fasterxml.jackson.annotation.JsonProperty("status") val status: Order.Status? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("complete") val complete: kotlin.Boolean? = false ) { diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt index 0a0c9a010354..94a227fec7da 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -24,12 +24,24 @@ import org.openapitools.server.models.Tag * @param status pet status in the store */ data class Pet( + + @field:com.fasterxml.jackson.annotation.JsonProperty("name") val name: kotlin.String, + + @field:com.fasterxml.jackson.annotation.JsonProperty("photoUrls") val photoUrls: kotlin.collections.List, + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("category") val category: Category? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("tags") val tags: kotlin.collections.List? = null, /* pet status in the store */ + + @field:com.fasterxml.jackson.annotation.JsonProperty("status") val status: Pet.Status? = null ) { diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt index 9c0bd1e9aada..c140980d1c33 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -18,7 +18,11 @@ package org.openapitools.server.models * @param name */ data class Tag( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("name") val name: kotlin.String? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt index b26d40023f95..79e4f28fe2ec 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt @@ -24,14 +24,30 @@ package org.openapitools.server.models * @param userStatus User Status */ data class User( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("username") val username: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("firstName") val firstName: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("lastName") val lastName: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("email") val email: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("password") val password: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("phone") val phone: kotlin.String? = null, /* User Status */ + + @field:com.fasterxml.jackson.annotation.JsonProperty("userStatus") val userStatus: kotlin.Int? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt index 852f443a304c..fcd1e6e2268d 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -18,7 +18,11 @@ package org.openapitools.server.models * @param name */ data class Category( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("name") val name: kotlin.String? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 94b9ddf7b92e..8d0bcd12a7ea 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -19,8 +19,14 @@ package org.openapitools.server.models * @param message */ data class ModelApiResponse( + + @field:com.fasterxml.jackson.annotation.JsonProperty("code") val code: kotlin.Int? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("type") val type: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("message") val message: kotlin.String? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt index 48c1ef32bd34..39340c4f9928 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -22,12 +22,24 @@ package org.openapitools.server.models * @param complete */ data class Order( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("petId") val petId: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("quantity") val quantity: kotlin.Int? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("shipDate") val shipDate: java.time.OffsetDateTime? = null, /* Order Status */ + + @field:com.fasterxml.jackson.annotation.JsonProperty("status") val status: Order.Status? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("complete") val complete: kotlin.Boolean? = false ) { diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt index 0a0c9a010354..94a227fec7da 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -24,12 +24,24 @@ import org.openapitools.server.models.Tag * @param status pet status in the store */ data class Pet( + + @field:com.fasterxml.jackson.annotation.JsonProperty("name") val name: kotlin.String, + + @field:com.fasterxml.jackson.annotation.JsonProperty("photoUrls") val photoUrls: kotlin.collections.List, + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("category") val category: Category? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("tags") val tags: kotlin.collections.List? = null, /* pet status in the store */ + + @field:com.fasterxml.jackson.annotation.JsonProperty("status") val status: Pet.Status? = null ) { diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt index 9c0bd1e9aada..c140980d1c33 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -18,7 +18,11 @@ package org.openapitools.server.models * @param name */ data class Tag( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("name") val name: kotlin.String? = null ) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt index b26d40023f95..79e4f28fe2ec 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt @@ -24,14 +24,30 @@ package org.openapitools.server.models * @param userStatus User Status */ data class User( + + @field:com.fasterxml.jackson.annotation.JsonProperty("id") val id: kotlin.Long? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("username") val username: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("firstName") val firstName: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("lastName") val lastName: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("email") val email: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("password") val password: kotlin.String? = null, + + @field:com.fasterxml.jackson.annotation.JsonProperty("phone") val phone: kotlin.String? = null, /* User Status */ + + @field:com.fasterxml.jackson.annotation.JsonProperty("userStatus") val userStatus: kotlin.Int? = null ) From 730028458e8715e708341602280a2c7062c96ca7 Mon Sep 17 00:00:00 2001 From: koenlavooij Date: Thu, 27 Mar 2025 21:57:33 +0100 Subject: [PATCH 4/4] Fix for required headerParams --- .../kotlin-server/libraries/javalin6/headerParams.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/headerParams.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/headerParams.mustache index a5b25b1a993f..6489842d2738 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/headerParams.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/headerParams.mustache @@ -1 +1 @@ -{{#isHeaderParam}}ctx.header("{{baseName}}"){{/isHeaderParam}} \ No newline at end of file +{{#isHeaderParam}}ctx.header("{{baseName}}"){{#required}}{{^defaultValue}} ?: throw io.javalin.http.BadRequestResponse("Required header {{baseName}} not present") {{/defaultValue}}{{#defaultValue}}{{>paramDefault}}{{/defaultValue}}{{/required}}{{/isHeaderParam}} \ No newline at end of file