[kotlin-spring][server] Feat: Allow implementation of arbitrary interface in DTOs (similar to x-implements from java-spring) (#21950)

* add basic implementation and tests

* improve test a bit

* modify kotlin-spring.md

* add x-kotlin-implements also to enum

* update samples & properly define implemented vendor extension

* use enum.getName() instead of hardcoded string as key in vendor extension map

* fix docs

* fix test openapi spec and test

* add samples for x-kotlin-implements

* add samples for x-kotlin-implements to proper output folder

* fix

* revert unwanted changes

* move to correct place

* fix mustache template

* add to samples-kotlin-server.yaml

* reuse 1 open api schema for everything. Add also case where interface extends interface.

* add warn logs when x-kotlin-implements-fields is used without x-kotlin-implements to improve usability

* remove unnecessary generated files

* remove unnecessary generated files

* remove "status" inner enum from Pet as it fails to properly import as Pet.Status in implementations. This is a separate bug - not caused by x-kotlin-implements
This commit is contained in:
Jachym Metlicka
2025-09-15 20:13:08 +02:00
committed by GitHub
parent 5c04b754ab
commit 6278512122
136 changed files with 2650 additions and 97 deletions

View File

@@ -27,7 +27,7 @@ data class Category(
@get:Pattern(regexp="^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$")
@Schema(example = "null", description = "")
@get:JsonProperty("name") val name: kotlin.String? = null
) {
) {
}

View File

@@ -30,7 +30,7 @@ data class ModelApiResponse(
@Schema(example = "null", description = "")
@get:JsonProperty("message") val message: kotlin.String? = null
) {
) {
}

View File

@@ -44,7 +44,7 @@ data class Order(
@Schema(example = "null", description = "")
@get:JsonProperty("complete") val complete: kotlin.Boolean? = false
) {
) {
/**
* Order Status

View File

@@ -49,7 +49,7 @@ data class Pet(
@Schema(example = "null", description = "pet status in the store")
@Deprecated(message = "")
@get:JsonProperty("status") val status: Pet.Status? = null
) {
) {
/**
* pet status in the store

View File

@@ -26,7 +26,7 @@ data class Tag(
@Schema(example = "null", description = "")
@get:JsonProperty("name") val name: kotlin.String? = null
) {
) {
}

View File

@@ -50,7 +50,7 @@ data class User(
@Schema(example = "null", description = "User Status")
@get:JsonProperty("userStatus") val userStatus: kotlin.Int? = null
) {
) {
}