diff --git a/bin/configs/kotlin-spring-boot-delegate.yaml b/bin/configs/kotlin-spring-boot-delegate.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..173713600fe21ed6af68140aa6c341404361e259
--- /dev/null
+++ b/bin/configs/kotlin-spring-boot-delegate.yaml
@@ -0,0 +1,9 @@
+generatorName: kotlin-spring
+outputDir: samples/server/petstore/kotlin-springboot-delegate
+inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+templateDir: modules/openapi-generator/src/main/resources/kotlin-spring
+additionalProperties:
+  library: spring-boot
+  delegatePattern: "true"
+  swaggerAnnotations: "true"
+  beanValidations: "true"
diff --git a/modules/openapi-generator/src/main/resources/kotlin-spring/generatedAnnotation.mustache b/modules/openapi-generator/src/main/resources/kotlin-spring/generatedAnnotation.mustache
index 6a604a1f7a74857b5abf32cff8ae971e239ba8ee..cda4e662bdc39f37117f071a45a92ee7275067c8 100644
--- a/modules/openapi-generator/src/main/resources/kotlin-spring/generatedAnnotation.mustache
+++ b/modules/openapi-generator/src/main/resources/kotlin-spring/generatedAnnotation.mustache
@@ -1 +1 @@
-@javax.annotation.Generated(value = ["{{generatorClass}}"]{{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})
+@javax.annotation.Generated(value = ["{{generatorClass}}"]{{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator-ignore b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/FILES b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..7f1fed4bfbd6e870eeed2df31bc603bca337e700
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/FILES
@@ -0,0 +1,25 @@
+README.md
+build.gradle.kts
+pom.xml
+settings.gradle
+src/main/kotlin/org/openapitools/Application.kt
+src/main/kotlin/org/openapitools/api/ApiUtil.kt
+src/main/kotlin/org/openapitools/api/Exceptions.kt
+src/main/kotlin/org/openapitools/api/PetApi.kt
+src/main/kotlin/org/openapitools/api/PetApiController.kt
+src/main/kotlin/org/openapitools/api/PetApiDelegate.kt
+src/main/kotlin/org/openapitools/api/StoreApi.kt
+src/main/kotlin/org/openapitools/api/StoreApiController.kt
+src/main/kotlin/org/openapitools/api/StoreApiDelegate.kt
+src/main/kotlin/org/openapitools/api/UserApi.kt
+src/main/kotlin/org/openapitools/api/UserApiController.kt
+src/main/kotlin/org/openapitools/api/UserApiDelegate.kt
+src/main/kotlin/org/openapitools/model/Category.kt
+src/main/kotlin/org/openapitools/model/InlineObject.kt
+src/main/kotlin/org/openapitools/model/InlineObject1.kt
+src/main/kotlin/org/openapitools/model/ModelApiResponse.kt
+src/main/kotlin/org/openapitools/model/Order.kt
+src/main/kotlin/org/openapitools/model/Pet.kt
+src/main/kotlin/org/openapitools/model/Tag.kt
+src/main/kotlin/org/openapitools/model/User.kt
+src/main/resources/application.yaml
diff --git a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..d99e7162d01f35766e7a53f78b6acb6f7d84f1c3
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.0.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin-springboot-delegate/README.md b/samples/server/petstore/kotlin-springboot-delegate/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b6865a08113567d83d382f9bf4bdd675ed20f839
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/README.md
@@ -0,0 +1,21 @@
+# openAPIPetstore
+
+This Kotlin based [Spring Boot](https://spring.io/projects/spring-boot) application has been generated using the [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator).
+
+## Getting Started
+
+This document assumes you have either maven or gradle available, either via the wrapper or otherwise. This does not come with a gradle / maven wrapper checked in.
+
+By default a [`pom.xml`](pom.xml) file will be generated. If you specified `gradleBuildFile=true` when generating this project, a `build.gradle.kts` will also be generated. Note this uses [Gradle Kotlin DSL](https://github.com/gradle/kotlin-dsl).
+
+To build the project using maven, run:
+```bash
+mvn package && java -jar target/openapi-spring-1.0.0.jar
+```
+
+To build the project using gradle, run:
+```bash
+gradle build && java -jar build/libs/openapi-spring-1.0.0.jar
+```
+
+If all builds successfully, the server should run on [http://localhost:8080/](http://localhost:8080/)
diff --git a/samples/server/petstore/kotlin-springboot-delegate/build.gradle.kts b/samples/server/petstore/kotlin-springboot-delegate/build.gradle.kts
new file mode 100644
index 0000000000000000000000000000000000000000..49fe9400f70d23668b0726293963e1bf07e2e74e
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/build.gradle.kts
@@ -0,0 +1,54 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+buildscript {
+    repositories {
+        jcenter()
+        maven { url = uri("https://repo1.maven.org/maven2") }
+    }
+    dependencies {
+        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.2.0.M3")
+    }
+}
+
+group = "org.openapitools"
+version = "1.0.0"
+
+repositories {
+    jcenter()
+    maven { url = uri("https://repo1.maven.org/maven2") }
+}
+
+tasks.withType<KotlinCompile> {
+    kotlinOptions.jvmTarget = "1.8"
+}
+
+plugins {
+    val kotlinVersion = "1.3.30"
+    id("org.jetbrains.kotlin.jvm") version kotlinVersion
+    id("org.jetbrains.kotlin.plugin.jpa") version kotlinVersion
+    id("org.jetbrains.kotlin.plugin.spring") version kotlinVersion
+    id("org.springframework.boot") version "2.2.0.M3"
+    id("io.spring.dependency-management") version "1.0.5.RELEASE"
+}
+
+dependencies {
+	val kotlinxCoroutinesVersion="1.2.0"
+    compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
+    compile("org.jetbrains.kotlin:kotlin-reflect")
+    compile("org.springframework.boot:spring-boot-starter-web")
+    compile("io.swagger:swagger-annotations:1.5.21")
+    compile("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml")
+    compile("com.fasterxml.jackson.dataformat:jackson-dataformat-xml")
+    compile("com.fasterxml.jackson.module:jackson-module-kotlin")
+
+    testCompile("org.jetbrains.kotlin:kotlin-test-junit5")
+    testCompile("org.springframework.boot:spring-boot-starter-test") {
+        exclude(module = "junit")
+    }
+}
+
+repositories {
+	maven { url = uri("https://repo1.maven.org/maven2") }
+	maven { url = uri("https://repo.spring.io/snapshot") }
+	maven { url = uri("https://repo.spring.io/milestone") }
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/pom.xml b/samples/server/petstore/kotlin-springboot-delegate/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8af5e943b3a1cef5b7064198bbac30eb7b25e9ef
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/pom.xml
@@ -0,0 +1,160 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.openapitools</groupId>
+    <artifactId>openapi-spring</artifactId>
+    <packaging>jar</packaging>
+    <name>openapi-spring</name>
+    <version>1.0.0</version>
+    <properties>
+        <kotlin.version>1.3.30</kotlin.version>
+	    <kotlinx-coroutines.version>1.2.0</kotlinx-coroutines.version>
+        <javax-annotation-version>1.3.2</javax-annotation-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.0.M3</version>
+    </parent>
+    <build>
+        <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
+        <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>kotlin-maven-plugin</artifactId>
+                <groupId>org.jetbrains.kotlin</groupId>
+                <version>${kotlin.version}</version>
+                <configuration>
+                    <compilerPlugins>
+                        <plugin>spring</plugin>
+                    </compilerPlugins>
+                    <jvmTarget>1.8</jvmTarget>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>compile</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>compile</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>test-compile</id>
+                        <phase>test-compile</phase>
+                        <goals>
+                            <goal>test-compile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.jetbrains.kotlin</groupId>
+                        <artifactId>kotlin-maven-allopen</artifactId>
+                        <version>${kotlin.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-stdlib-jdk8</artifactId>
+            <version>${kotlin.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-reflect</artifactId>
+            <version>${kotlin.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.5.21</version>
+        </dependency>
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.module</groupId>
+            <artifactId>jackson-module-kotlin</artifactId>
+        </dependency>
+        <!-- Bean Validation API support -->
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>${javax-annotation-version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-test-junit5</artifactId>
+            <version>1.3.31</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+	<repositories>
+		<repository>
+			<id>spring-snapshots</id>
+			<name>Spring Snapshots</name>
+			<url>https://repo.spring.io/snapshot</url>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+		<repository>
+			<id>spring-milestones</id>
+			<name>Spring Milestones</name>
+			<url>https://repo.spring.io/milestone</url>
+		</repository>
+	</repositories>
+	<pluginRepositories>
+		<pluginRepository>
+			<id>spring-snapshots</id>
+			<name>Spring Snapshots</name>
+			<url>https://repo.spring.io/snapshot</url>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</pluginRepository>
+		<pluginRepository>
+			<id>spring-milestones</id>
+			<name>Spring Milestones</name>
+			<url>https://repo.spring.io/milestone</url>
+		</pluginRepository>
+	</pluginRepositories>
+</project>
diff --git a/samples/server/petstore/kotlin-springboot-delegate/settings.gradle b/samples/server/petstore/kotlin-springboot-delegate/settings.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..e9bd5d32d7c28a007047f494228c58fdd03c6fac
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/settings.gradle
@@ -0,0 +1,15 @@
+pluginManagement {
+	repositories {
+		maven { url = uri("https://repo.spring.io/snapshot") }
+		maven { url = uri("https://repo.spring.io/milestone") }
+		gradlePluginPortal()
+	}
+	resolutionStrategy {
+		eachPlugin {
+			if (requested.id.id == "org.springframework.boot") {
+				useModule("org.springframework.boot:spring-boot-gradle-plugin:${requested.version}")
+			}
+		}
+	}
+}
+rootProject.name = "openapi-spring"
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/Application.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/Application.kt
new file mode 100644
index 0000000000000000000000000000000000000000..f2ee49d476b6108068fa449edc57cee0bae7ac76
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/Application.kt
@@ -0,0 +1,14 @@
+package org.openapitools
+
+import org.springframework.boot.runApplication
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.boot.autoconfigure.SpringBootApplication
+
+
+@SpringBootApplication
+@ComponentScan(basePackages = ["org.openapitools", "org.openapitools.api", "org.openapitools.model"])
+class Application
+
+fun main(args: Array<String>) {
+    runApplication<Application>(*args)
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/ApiUtil.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/ApiUtil.kt
new file mode 100644
index 0000000000000000000000000000000000000000..88e892d0f49af76256c2962dd7aebbafde8afac7
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/ApiUtil.kt
@@ -0,0 +1,19 @@
+package org.openapitools.api
+
+import org.springframework.web.context.request.NativeWebRequest
+
+import javax.servlet.http.HttpServletResponse
+import java.io.IOException
+
+object ApiUtil {
+    fun setExampleResponse(req: NativeWebRequest, contentType: String, example: String) {
+        try {
+            val res = req.getNativeResponse(HttpServletResponse::class.java)
+            res?.characterEncoding = "UTF-8"
+            res?.addHeader("Content-Type", contentType)
+            res?.writer?.print(example)
+        } catch (e: IOException) {
+            throw RuntimeException(e)
+        }
+    }
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/Exceptions.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/Exceptions.kt
new file mode 100644
index 0000000000000000000000000000000000000000..44190af7a019ca7267e95b8b8a1af6f08ec0f3b8
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/Exceptions.kt
@@ -0,0 +1,29 @@
+package org.openapitools.api
+
+import org.springframework.http.HttpStatus
+import org.springframework.web.bind.annotation.ControllerAdvice
+import org.springframework.web.bind.annotation.ExceptionHandler
+import javax.servlet.http.HttpServletResponse
+import javax.validation.ConstraintViolationException
+
+// TODO Extend ApiException for custom exception handling, e.g. the below NotFound exception
+sealed class ApiException(msg: String, val code: Int) : Exception(msg)
+
+class NotFoundException(msg: String, code: Int = HttpStatus.NOT_FOUND.value()) : ApiException(msg, code)
+
+
+@ControllerAdvice
+class DefaultExceptionHandler {
+
+    @ExceptionHandler(value = [ApiException::class])
+    fun onApiException(ex: ApiException, response: HttpServletResponse): Unit =
+        response.sendError(ex.code, ex.message)
+
+    @ExceptionHandler(value = [NotImplementedError::class])
+    fun onNotImplemented(ex: NotImplementedError, response: HttpServletResponse): Unit =
+        response.sendError(HttpStatus.NOT_IMPLEMENTED.value())
+
+    @ExceptionHandler(value = [ConstraintViolationException::class])
+    fun onConstraintViolation(ex: ConstraintViolationException, response: HttpServletResponse): Unit =
+        response.sendError(HttpStatus.BAD_REQUEST.value(), ex.constraintViolations.joinToString(", ") { it.message })
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt
new file mode 100644
index 0000000000000000000000000000000000000000..fc6854ec10d06470c1342f560405891f8ab93a29
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt
@@ -0,0 +1,187 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.0.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+*/
+package org.openapitools.api
+
+import org.openapitools.model.ModelApiResponse
+import org.openapitools.model.Pet
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import io.swagger.annotations.ApiParam
+import io.swagger.annotations.ApiResponse
+import io.swagger.annotations.ApiResponses
+import io.swagger.annotations.Authorization
+import io.swagger.annotations.AuthorizationScope
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+
+import org.springframework.web.bind.annotation.*
+import org.springframework.validation.annotation.Validated
+import org.springframework.web.context.request.NativeWebRequest
+import org.springframework.beans.factory.annotation.Autowired
+
+import javax.validation.Valid
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+
+import kotlin.collections.List
+import kotlin.collections.Map
+
+@Validated
+@Api(value = "pet", description = "The pet API")
+@RequestMapping("\${api.base-path:/v2}")
+interface PetApi {
+
+    fun getDelegate(): PetApiDelegate = object: PetApiDelegate {}
+
+    @ApiOperation(
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        notes = "",
+        response = Pet::class,
+        authorizations = [Authorization(value = "petstore_auth", scopes = [AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), AuthorizationScope(scope = "read:pets", description = "read your pets")])])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = Pet::class),ApiResponse(code = 405, message = "Invalid input")])
+    @PostMapping(
+            value = ["/pet"],
+            produces = ["application/xml", "application/json"],
+            consumes = ["application/json", "application/xml"]
+    )
+    fun addPet(@ApiParam(value = "Pet object that needs to be added to the store" ,required=true ) @Valid @RequestBody pet: Pet
+): ResponseEntity<Pet> {
+        return getDelegate().addPet(pet);
+    }
+
+    @ApiOperation(
+        value = "Deletes a pet",
+        nickname = "deletePet",
+        notes = "",
+        authorizations = [Authorization(value = "petstore_auth", scopes = [AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), AuthorizationScope(scope = "read:pets", description = "read your pets")])])
+    @ApiResponses(
+        value = [ApiResponse(code = 400, message = "Invalid pet value")])
+    @DeleteMapping(
+            value = ["/pet/{petId}"]
+    )
+    fun deletePet(@ApiParam(value = "Pet id to delete", required=true) @PathVariable("petId") petId: kotlin.Long
+,@ApiParam(value = "" ) @RequestHeader(value="api_key", required=false) apiKey: kotlin.String?
+): ResponseEntity<Unit> {
+        return getDelegate().deletePet(petId, apiKey);
+    }
+
+    @ApiOperation(
+        value = "Finds Pets by status",
+        nickname = "findPetsByStatus",
+        notes = "Multiple status values can be provided with comma separated strings",
+        response = Pet::class,
+        responseContainer = "List",
+        authorizations = [Authorization(value = "petstore_auth", scopes = [AuthorizationScope(scope = "read:pets", description = "read your pets")])])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = Pet::class, responseContainer = "List"),ApiResponse(code = 400, message = "Invalid status value")])
+    @GetMapping(
+            value = ["/pet/findByStatus"],
+            produces = ["application/xml", "application/json"]
+    )
+    fun findPetsByStatus(@NotNull @ApiParam(value = "Status values that need to be considered for filter", required = true, allowableValues = "available, pending, sold") @Valid @RequestParam(value = "status", required = true) status: kotlin.collections.List<kotlin.String>
+): ResponseEntity<List<Pet>> {
+        return getDelegate().findPetsByStatus(status);
+    }
+
+    @ApiOperation(
+        value = "Finds Pets by tags",
+        nickname = "findPetsByTags",
+        notes = "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.",
+        response = Pet::class,
+        responseContainer = "List",
+        authorizations = [Authorization(value = "petstore_auth", scopes = [AuthorizationScope(scope = "read:pets", description = "read your pets")])])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = Pet::class, responseContainer = "List"),ApiResponse(code = 400, message = "Invalid tag value")])
+    @GetMapping(
+            value = ["/pet/findByTags"],
+            produces = ["application/xml", "application/json"]
+    )
+    fun findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) tags: kotlin.collections.List<kotlin.String>
+): ResponseEntity<List<Pet>> {
+        return getDelegate().findPetsByTags(tags);
+    }
+
+    @ApiOperation(
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet::class,
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = Pet::class),ApiResponse(code = 400, message = "Invalid ID supplied"),ApiResponse(code = 404, message = "Pet not found")])
+    @GetMapping(
+            value = ["/pet/{petId}"],
+            produces = ["application/xml", "application/json"]
+    )
+    fun getPetById(@ApiParam(value = "ID of pet to return", required=true) @PathVariable("petId") petId: kotlin.Long
+): ResponseEntity<Pet> {
+        return getDelegate().getPetById(petId);
+    }
+
+    @ApiOperation(
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        notes = "",
+        response = Pet::class,
+        authorizations = [Authorization(value = "petstore_auth", scopes = [AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), AuthorizationScope(scope = "read:pets", description = "read your pets")])])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = Pet::class),ApiResponse(code = 400, message = "Invalid ID supplied"),ApiResponse(code = 404, message = "Pet not found"),ApiResponse(code = 405, message = "Validation exception")])
+    @PutMapping(
+            value = ["/pet"],
+            produces = ["application/xml", "application/json"],
+            consumes = ["application/json", "application/xml"]
+    )
+    fun updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ,required=true ) @Valid @RequestBody pet: Pet
+): ResponseEntity<Pet> {
+        return getDelegate().updatePet(pet);
+    }
+
+    @ApiOperation(
+        value = "Updates a pet in the store with form data",
+        nickname = "updatePetWithForm",
+        notes = "",
+        authorizations = [Authorization(value = "petstore_auth", scopes = [AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), AuthorizationScope(scope = "read:pets", description = "read your pets")])])
+    @ApiResponses(
+        value = [ApiResponse(code = 405, message = "Invalid input")])
+    @PostMapping(
+            value = ["/pet/{petId}"],
+            consumes = ["application/x-www-form-urlencoded"]
+    )
+    fun updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required=true) @PathVariable("petId") petId: kotlin.Long
+,@ApiParam(value = "Updated name of the pet") @RequestParam(value="name", required=false) name: kotlin.String? 
+,@ApiParam(value = "Updated status of the pet") @RequestParam(value="status", required=false) status: kotlin.String? 
+): ResponseEntity<Unit> {
+        return getDelegate().updatePetWithForm(petId, name, status);
+    }
+
+    @ApiOperation(
+        value = "uploads an image",
+        nickname = "uploadFile",
+        notes = "",
+        response = ModelApiResponse::class,
+        authorizations = [Authorization(value = "petstore_auth", scopes = [AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), AuthorizationScope(scope = "read:pets", description = "read your pets")])])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse::class)])
+    @PostMapping(
+            value = ["/pet/{petId}/uploadImage"],
+            produces = ["application/json"],
+            consumes = ["multipart/form-data"]
+    )
+    fun uploadFile(@ApiParam(value = "ID of pet to update", required=true) @PathVariable("petId") petId: kotlin.Long
+,@ApiParam(value = "Additional data to pass to server") @RequestParam(value="additionalMetadata", required=false) additionalMetadata: kotlin.String? 
+,@ApiParam(value = "file detail") @Valid @RequestPart("file") file: org.springframework.core.io.Resource?
+): ResponseEntity<ModelApiResponse> {
+        return getDelegate().uploadFile(petId, additionalMetadata, file);
+    }
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApiController.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApiController.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6e1ceb2d4580ef65735796c41a25fb78b8962320
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApiController.kt
@@ -0,0 +1,20 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import java.util.Optional;
+@javax.annotation.Generated(value = ["org.openapitools.codegen.languages.KotlinSpringServerCodegen"])
+
+@Controller
+@RequestMapping("\${openapi.openAPIPetstore.base-path:/v2}")
+class PetApiController(
+        @org.springframework.beans.factory.annotation.Autowired(required = false) delegate: PetApiDelegate
+) : PetApi {
+    private val delegate: PetApiDelegate
+
+    init {
+        this.delegate = Optional.ofNullable(delegate).orElse(object : PetApiDelegate {})
+    }
+
+    override fun getDelegate(): PetApiDelegate = delegate
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApiDelegate.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApiDelegate.kt
new file mode 100644
index 0000000000000000000000000000000000000000..277ce7d52b8102440f6e7715f0df1758dd4843f7
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApiDelegate.kt
@@ -0,0 +1,166 @@
+package org.openapitools.api
+
+import org.openapitools.model.ModelApiResponse
+import org.openapitools.model.Pet
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+import org.springframework.web.context.request.NativeWebRequest
+import org.springframework.core.io.Resource
+
+import java.util.Optional
+
+/**
+ * A delegate to be called by the {@link PetApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = ["org.openapitools.codegen.languages.KotlinSpringServerCodegen"])
+interface PetApiDelegate {
+
+    fun getRequest(): Optional<NativeWebRequest> = Optional.empty()
+
+    /**
+     * @see PetApi#addPet
+     */
+    fun addPet(pet: Pet): ResponseEntity<Pet> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],  \"name\" : \"doggie\",  \"id\" : 0,  \"category\" : {    \"name\" : \"name\",    \"id\" : 6  },  \"tags\" : [ {    \"name\" : \"name\",    \"id\" : 1  }, {    \"name\" : \"name\",    \"id\" : 1  } ],  \"status\" : \"available\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<Pet>  <id>123456789</id>  <name>doggie</name>  <photoUrls>    <photoUrls>aeiou</photoUrls>  </photoUrls>  <tags>  </tags>  <status>aeiou</status></Pet>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see PetApi#deletePet
+     */
+    fun deletePet(petId: kotlin.Long,
+        apiKey: kotlin.String?): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see PetApi#findPetsByStatus
+     */
+    fun findPetsByStatus(status: kotlin.collections.List<kotlin.String>): ResponseEntity<List<Pet>> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],  \"name\" : \"doggie\",  \"id\" : 0,  \"category\" : {    \"name\" : \"name\",    \"id\" : 6  },  \"tags\" : [ {    \"name\" : \"name\",    \"id\" : 1  }, {    \"name\" : \"name\",    \"id\" : 1  } ],  \"status\" : \"available\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<Pet>  <id>123456789</id>  <name>doggie</name>  <photoUrls>    <photoUrls>aeiou</photoUrls>  </photoUrls>  <tags>  </tags>  <status>aeiou</status></Pet>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see PetApi#findPetsByTags
+     */
+    fun findPetsByTags(tags: kotlin.collections.List<kotlin.String>): ResponseEntity<List<Pet>> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],  \"name\" : \"doggie\",  \"id\" : 0,  \"category\" : {    \"name\" : \"name\",    \"id\" : 6  },  \"tags\" : [ {    \"name\" : \"name\",    \"id\" : 1  }, {    \"name\" : \"name\",    \"id\" : 1  } ],  \"status\" : \"available\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<Pet>  <id>123456789</id>  <name>doggie</name>  <photoUrls>    <photoUrls>aeiou</photoUrls>  </photoUrls>  <tags>  </tags>  <status>aeiou</status></Pet>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see PetApi#getPetById
+     */
+    fun getPetById(petId: kotlin.Long): ResponseEntity<Pet> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],  \"name\" : \"doggie\",  \"id\" : 0,  \"category\" : {    \"name\" : \"name\",    \"id\" : 6  },  \"tags\" : [ {    \"name\" : \"name\",    \"id\" : 1  }, {    \"name\" : \"name\",    \"id\" : 1  } ],  \"status\" : \"available\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<Pet>  <id>123456789</id>  <name>doggie</name>  <photoUrls>    <photoUrls>aeiou</photoUrls>  </photoUrls>  <tags>  </tags>  <status>aeiou</status></Pet>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see PetApi#updatePet
+     */
+    fun updatePet(pet: Pet): ResponseEntity<Pet> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],  \"name\" : \"doggie\",  \"id\" : 0,  \"category\" : {    \"name\" : \"name\",    \"id\" : 6  },  \"tags\" : [ {    \"name\" : \"name\",    \"id\" : 1  }, {    \"name\" : \"name\",    \"id\" : 1  } ],  \"status\" : \"available\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<Pet>  <id>123456789</id>  <name>doggie</name>  <photoUrls>    <photoUrls>aeiou</photoUrls>  </photoUrls>  <tags>  </tags>  <status>aeiou</status></Pet>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see PetApi#updatePetWithForm
+     */
+    fun updatePetWithForm(petId: kotlin.Long,
+        name: kotlin.String?,
+        status: kotlin.String?): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see PetApi#uploadFile
+     */
+    fun uploadFile(petId: kotlin.Long,
+        additionalMetadata: kotlin.String?,
+        file: Resource?): ResponseEntity<ModelApiResponse> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"code\" : 0,  \"type\" : \"type\",  \"message\" : \"message\"}")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a2ae7a5c06c48765952371aeede243778e2f7f9c
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt
@@ -0,0 +1,107 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.0.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+*/
+package org.openapitools.api
+
+import org.openapitools.model.Order
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import io.swagger.annotations.ApiParam
+import io.swagger.annotations.ApiResponse
+import io.swagger.annotations.ApiResponses
+import io.swagger.annotations.Authorization
+import io.swagger.annotations.AuthorizationScope
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+
+import org.springframework.web.bind.annotation.*
+import org.springframework.validation.annotation.Validated
+import org.springframework.web.context.request.NativeWebRequest
+import org.springframework.beans.factory.annotation.Autowired
+
+import javax.validation.Valid
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+
+import kotlin.collections.List
+import kotlin.collections.Map
+
+@Validated
+@Api(value = "store", description = "The store API")
+@RequestMapping("\${api.base-path:/v2}")
+interface StoreApi {
+
+    fun getDelegate(): StoreApiDelegate = object: StoreApiDelegate {}
+
+    @ApiOperation(
+        value = "Delete purchase order by ID",
+        nickname = "deleteOrder",
+        notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors")
+    @ApiResponses(
+        value = [ApiResponse(code = 400, message = "Invalid ID supplied"),ApiResponse(code = 404, message = "Order not found")])
+    @DeleteMapping(
+            value = ["/store/order/{orderId}"]
+    )
+    fun deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required=true) @PathVariable("orderId") orderId: kotlin.String
+): ResponseEntity<Unit> {
+        return getDelegate().deleteOrder(orderId);
+    }
+
+    @ApiOperation(
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = kotlin.Int::class,
+        responseContainer = "Map",
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = kotlin.collections.Map::class, responseContainer = "Map")])
+    @GetMapping(
+            value = ["/store/inventory"],
+            produces = ["application/json"]
+    )
+    fun getInventory(): ResponseEntity<Map<String, kotlin.Int>> {
+        return getDelegate().getInventory();
+    }
+
+    @ApiOperation(
+        value = "Find purchase order by ID",
+        nickname = "getOrderById",
+        notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions",
+        response = Order::class)
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = Order::class),ApiResponse(code = 400, message = "Invalid ID supplied"),ApiResponse(code = 404, message = "Order not found")])
+    @GetMapping(
+            value = ["/store/order/{orderId}"],
+            produces = ["application/xml", "application/json"]
+    )
+    fun getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required=true) @PathVariable("orderId") orderId: kotlin.Long
+): ResponseEntity<Order> {
+        return getDelegate().getOrderById(orderId);
+    }
+
+    @ApiOperation(
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order::class)
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = Order::class),ApiResponse(code = 400, message = "Invalid Order")])
+    @PostMapping(
+            value = ["/store/order"],
+            produces = ["application/xml", "application/json"],
+            consumes = ["application/json"]
+    )
+    fun placeOrder(@ApiParam(value = "order placed for purchasing the pet" ,required=true ) @Valid @RequestBody order: Order
+): ResponseEntity<Order> {
+        return getDelegate().placeOrder(order);
+    }
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApiController.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApiController.kt
new file mode 100644
index 0000000000000000000000000000000000000000..032a3b3aed8931f00c2cefdab180b0a7f6105017
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApiController.kt
@@ -0,0 +1,20 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import java.util.Optional;
+@javax.annotation.Generated(value = ["org.openapitools.codegen.languages.KotlinSpringServerCodegen"])
+
+@Controller
+@RequestMapping("\${openapi.openAPIPetstore.base-path:/v2}")
+class StoreApiController(
+        @org.springframework.beans.factory.annotation.Autowired(required = false) delegate: StoreApiDelegate
+) : StoreApi {
+    private val delegate: StoreApiDelegate
+
+    init {
+        this.delegate = Optional.ofNullable(delegate).orElse(object : StoreApiDelegate {})
+    }
+
+    override fun getDelegate(): StoreApiDelegate = delegate
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApiDelegate.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApiDelegate.kt
new file mode 100644
index 0000000000000000000000000000000000000000..95f8cde396e58d319523d4e1083fec5ac91c089a
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApiDelegate.kt
@@ -0,0 +1,80 @@
+package org.openapitools.api
+
+import org.openapitools.model.Order
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+import org.springframework.web.context.request.NativeWebRequest
+import org.springframework.core.io.Resource
+
+import java.util.Optional
+
+/**
+ * A delegate to be called by the {@link StoreApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = ["org.openapitools.codegen.languages.KotlinSpringServerCodegen"])
+interface StoreApiDelegate {
+
+    fun getRequest(): Optional<NativeWebRequest> = Optional.empty()
+
+    /**
+     * @see StoreApi#deleteOrder
+     */
+    fun deleteOrder(orderId: kotlin.String): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see StoreApi#getInventory
+     */
+    fun getInventory(): ResponseEntity<Map<String, kotlin.Int>> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see StoreApi#getOrderById
+     */
+    fun getOrderById(orderId: kotlin.Long): ResponseEntity<Order> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"petId\" : 6,  \"quantity\" : 1,  \"id\" : 0,  \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",  \"complete\" : false,  \"status\" : \"placed\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<Order>  <id>123456789</id>  <petId>123456789</petId>  <quantity>123</quantity>  <shipDate>2000-01-23T04:56:07.000Z</shipDate>  <status>aeiou</status>  <complete>true</complete></Order>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see StoreApi#placeOrder
+     */
+    fun placeOrder(order: Order): ResponseEntity<Order> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"petId\" : 6,  \"quantity\" : 1,  \"id\" : 0,  \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",  \"complete\" : false,  \"status\" : \"placed\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<Order>  <id>123456789</id>  <petId>123456789</petId>  <quantity>123</quantity>  <shipDate>2000-01-23T04:56:07.000Z</shipDate>  <status>aeiou</status>  <complete>true</complete></Order>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7fa6bf2b4a90ab781ac08d3548438f347312b051
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt
@@ -0,0 +1,170 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.0.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+*/
+package org.openapitools.api
+
+import org.openapitools.model.User
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import io.swagger.annotations.ApiParam
+import io.swagger.annotations.ApiResponse
+import io.swagger.annotations.ApiResponses
+import io.swagger.annotations.Authorization
+import io.swagger.annotations.AuthorizationScope
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+
+import org.springframework.web.bind.annotation.*
+import org.springframework.validation.annotation.Validated
+import org.springframework.web.context.request.NativeWebRequest
+import org.springframework.beans.factory.annotation.Autowired
+
+import javax.validation.Valid
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+
+import kotlin.collections.List
+import kotlin.collections.Map
+
+@Validated
+@Api(value = "user", description = "The user API")
+@RequestMapping("\${api.base-path:/v2}")
+interface UserApi {
+
+    fun getDelegate(): UserApiDelegate = object: UserApiDelegate {}
+
+    @ApiOperation(
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user.",
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation")])
+    @PostMapping(
+            value = ["/user"],
+            consumes = ["application/json"]
+    )
+    fun createUser(@ApiParam(value = "Created user object" ,required=true ) @Valid @RequestBody user: User
+): ResponseEntity<Unit> {
+        return getDelegate().createUser(user);
+    }
+
+    @ApiOperation(
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = "",
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation")])
+    @PostMapping(
+            value = ["/user/createWithArray"],
+            consumes = ["application/json"]
+    )
+    fun createUsersWithArrayInput(@ApiParam(value = "List of user object" ,required=true ) @Valid @RequestBody user: kotlin.collections.List<User>
+): ResponseEntity<Unit> {
+        return getDelegate().createUsersWithArrayInput(user);
+    }
+
+    @ApiOperation(
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = "",
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation")])
+    @PostMapping(
+            value = ["/user/createWithList"],
+            consumes = ["application/json"]
+    )
+    fun createUsersWithListInput(@ApiParam(value = "List of user object" ,required=true ) @Valid @RequestBody user: kotlin.collections.List<User>
+): ResponseEntity<Unit> {
+        return getDelegate().createUsersWithListInput(user);
+    }
+
+    @ApiOperation(
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user.",
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 400, message = "Invalid username supplied"),ApiResponse(code = 404, message = "User not found")])
+    @DeleteMapping(
+            value = ["/user/{username}"]
+    )
+    fun deleteUser(@ApiParam(value = "The name that needs to be deleted", required=true) @PathVariable("username") username: kotlin.String
+): ResponseEntity<Unit> {
+        return getDelegate().deleteUser(username);
+    }
+
+    @ApiOperation(
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User::class)
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = User::class),ApiResponse(code = 400, message = "Invalid username supplied"),ApiResponse(code = 404, message = "User not found")])
+    @GetMapping(
+            value = ["/user/{username}"],
+            produces = ["application/xml", "application/json"]
+    )
+    fun getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required=true) @PathVariable("username") username: kotlin.String
+): ResponseEntity<User> {
+        return getDelegate().getUserByName(username);
+    }
+
+    @ApiOperation(
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = kotlin.String::class)
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation", response = kotlin.String::class),ApiResponse(code = 400, message = "Invalid username/password supplied")])
+    @GetMapping(
+            value = ["/user/login"],
+            produces = ["application/xml", "application/json"]
+    )
+    fun loginUser(@NotNull @Pattern(regexp="^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$") @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) username: kotlin.String
+,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) password: kotlin.String
+): ResponseEntity<kotlin.String> {
+        return getDelegate().loginUser(username, password);
+    }
+
+    @ApiOperation(
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = "",
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 200, message = "successful operation")])
+    @GetMapping(
+            value = ["/user/logout"]
+    )
+    fun logoutUser(): ResponseEntity<Unit> {
+        return getDelegate().logoutUser();
+    }
+
+    @ApiOperation(
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user.",
+        authorizations = [Authorization(value = "api_key")])
+    @ApiResponses(
+        value = [ApiResponse(code = 400, message = "Invalid user supplied"),ApiResponse(code = 404, message = "User not found")])
+    @PutMapping(
+            value = ["/user/{username}"],
+            consumes = ["application/json"]
+    )
+    fun updateUser(@ApiParam(value = "name that need to be deleted", required=true) @PathVariable("username") username: kotlin.String
+,@ApiParam(value = "Updated user object" ,required=true ) @Valid @RequestBody user: User
+): ResponseEntity<Unit> {
+        return getDelegate().updateUser(username, user);
+    }
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApiController.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApiController.kt
new file mode 100644
index 0000000000000000000000000000000000000000..67d92ac04f83c0a3d49ab2136c37940e289f0745
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApiController.kt
@@ -0,0 +1,20 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import java.util.Optional;
+@javax.annotation.Generated(value = ["org.openapitools.codegen.languages.KotlinSpringServerCodegen"])
+
+@Controller
+@RequestMapping("\${openapi.openAPIPetstore.base-path:/v2}")
+class UserApiController(
+        @org.springframework.beans.factory.annotation.Autowired(required = false) delegate: UserApiDelegate
+) : UserApi {
+    private val delegate: UserApiDelegate
+
+    init {
+        this.delegate = Optional.ofNullable(delegate).orElse(object : UserApiDelegate {})
+    }
+
+    override fun getDelegate(): UserApiDelegate = delegate
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApiDelegate.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApiDelegate.kt
new file mode 100644
index 0000000000000000000000000000000000000000..274d497f1e910e269c4ad18d7cf5470fa335a9e3
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApiDelegate.kt
@@ -0,0 +1,106 @@
+package org.openapitools.api
+
+import org.openapitools.model.User
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+import org.springframework.web.context.request.NativeWebRequest
+import org.springframework.core.io.Resource
+
+import java.util.Optional
+
+/**
+ * A delegate to be called by the {@link UserApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = ["org.openapitools.codegen.languages.KotlinSpringServerCodegen"])
+interface UserApiDelegate {
+
+    fun getRequest(): Optional<NativeWebRequest> = Optional.empty()
+
+    /**
+     * @see UserApi#createUser
+     */
+    fun createUser(user: User): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see UserApi#createUsersWithArrayInput
+     */
+    fun createUsersWithArrayInput(user: kotlin.collections.List<User>): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see UserApi#createUsersWithListInput
+     */
+    fun createUsersWithListInput(user: kotlin.collections.List<User>): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see UserApi#deleteUser
+     */
+    fun deleteUser(username: kotlin.String): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see UserApi#getUserByName
+     */
+    fun getUserByName(username: kotlin.String): ResponseEntity<User> {
+        getRequest().ifPresent { request ->
+            for (mediaType in MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    ApiUtil.setExampleResponse(request, "application/json", "{  \"firstName\" : \"firstName\",  \"lastName\" : \"lastName\",  \"password\" : \"password\",  \"userStatus\" : 6,  \"phone\" : \"phone\",  \"id\" : 0,  \"email\" : \"email\",  \"username\" : \"username\"}")
+                    break
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    ApiUtil.setExampleResponse(request, "application/xml", "<User>  <id>123456789</id>  <username>aeiou</username>  <firstName>aeiou</firstName>  <lastName>aeiou</lastName>  <email>aeiou</email>  <password>aeiou</password>  <phone>aeiou</phone>  <userStatus>123</userStatus></User>")
+                    break
+                }
+            }
+        }
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see UserApi#loginUser
+     */
+    fun loginUser(username: kotlin.String,
+        password: kotlin.String): ResponseEntity<kotlin.String> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see UserApi#logoutUser
+     */
+    fun logoutUser(): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+
+    /**
+     * @see UserApi#updateUser
+     */
+    fun updateUser(username: kotlin.String,
+        user: User): ResponseEntity<Unit> {
+        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
+
+    }
+
+}
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Category.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Category.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c62a3ec6c6eb1c36dfc7003b131784ff679dcf06
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Category.kt
@@ -0,0 +1,29 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * A category for a pet
+ * @param id 
+ * @param name 
+ */
+data class Category(
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("id") val id: kotlin.Long? = null,
+@get:Pattern(regexp="^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$") 
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("name") val name: kotlin.String? = null
+) {
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/InlineObject.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/InlineObject.kt
new file mode 100644
index 0000000000000000000000000000000000000000..25c53cf08b83736ce4be33363f5c874a78486c7c
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/InlineObject.kt
@@ -0,0 +1,29 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 
+ * @param name Updated name of the pet
+ * @param status Updated status of the pet
+ */
+data class InlineObject(
+
+    @ApiModelProperty(example = "null", value = "Updated name of the pet")
+    @field:JsonProperty("name") val name: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "Updated status of the pet")
+    @field:JsonProperty("status") val status: kotlin.String? = null
+) {
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/InlineObject1.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/InlineObject1.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8dfd458743be9dcb11899cdd558c18d72eb50a23
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/InlineObject1.kt
@@ -0,0 +1,29 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * 
+ * @param additionalMetadata Additional data to pass to server
+ * @param file file to upload
+ */
+data class InlineObject1(
+
+    @ApiModelProperty(example = "null", value = "Additional data to pass to server")
+    @field:JsonProperty("additionalMetadata") val additionalMetadata: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "file to upload")
+    @field:JsonProperty("file") val file: org.springframework.core.io.Resource? = null
+) {
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/ModelApiResponse.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/ModelApiResponse.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6ac03ab610eb2a38c95a27ec6e678db810ae94e7
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/ModelApiResponse.kt
@@ -0,0 +1,33 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * Describes the result of uploading an image resource
+ * @param code 
+ * @param type 
+ * @param message 
+ */
+data class ModelApiResponse(
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("code") val code: kotlin.Int? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("type") val type: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("message") val message: kotlin.String? = null
+) {
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Order.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Order.kt
new file mode 100644
index 0000000000000000000000000000000000000000..83f4ba454214dc213e6d5448b031297472b6bf0e
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Order.kt
@@ -0,0 +1,60 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import com.fasterxml.jackson.annotation.JsonValue
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * An order for a pets from the pet store
+ * @param id 
+ * @param petId 
+ * @param quantity 
+ * @param shipDate 
+ * @param status Order Status
+ * @param complete 
+ */
+data class Order(
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("id") val id: kotlin.Long? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("petId") val petId: kotlin.Long? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("quantity") val quantity: kotlin.Int? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("shipDate") val shipDate: java.time.OffsetDateTime? = null,
+
+    @ApiModelProperty(example = "null", value = "Order Status")
+    @field:JsonProperty("status") val status: Order.Status? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("complete") val complete: kotlin.Boolean? = null
+) {
+
+    /**
+    * Order Status
+    * Values: placed,approved,delivered
+    */
+    enum class Status(val value: kotlin.String) {
+    
+        @JsonProperty("placed") placed("placed"),
+    
+        @JsonProperty("approved") approved("approved"),
+    
+        @JsonProperty("delivered") delivered("delivered");
+    
+    }
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Pet.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Pet.kt
new file mode 100644
index 0000000000000000000000000000000000000000..de74ce560543b1be01922410b49100d07846f56b
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Pet.kt
@@ -0,0 +1,64 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import com.fasterxml.jackson.annotation.JsonValue
+import org.openapitools.model.Category
+import org.openapitools.model.Tag
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * A pet for sale in the pet store
+ * @param name 
+ * @param photoUrls 
+ * @param id 
+ * @param category 
+ * @param tags 
+ * @param status pet status in the store
+ */
+data class Pet(
+
+    @get:NotNull 
+    @ApiModelProperty(example = "doggie", required = true, value = "")
+    @field:JsonProperty("name") val name: kotlin.String,
+
+    @get:NotNull 
+    @ApiModelProperty(example = "null", required = true, value = "")
+    @field:JsonProperty("photoUrls") val photoUrls: kotlin.collections.List<kotlin.String>,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("id") val id: kotlin.Long? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("category") val category: Category? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("tags") val tags: kotlin.collections.List<Tag>? = null,
+
+    @ApiModelProperty(example = "null", value = "pet status in the store")
+    @field:JsonProperty("status") val status: Pet.Status? = null
+) {
+
+    /**
+    * pet status in the store
+    * Values: available,pending,sold
+    */
+    enum class Status(val value: kotlin.String) {
+    
+        @JsonProperty("available") available("available"),
+    
+        @JsonProperty("pending") pending("pending"),
+    
+        @JsonProperty("sold") sold("sold");
+    
+    }
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Tag.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Tag.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7e7d12349842f03f17eefac2b9ba5c7366ce2d4e
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/Tag.kt
@@ -0,0 +1,29 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * A tag for a pet
+ * @param id 
+ * @param name 
+ */
+data class Tag(
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("id") val id: kotlin.Long? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("name") val name: kotlin.String? = null
+) {
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/User.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/User.kt
new file mode 100644
index 0000000000000000000000000000000000000000..dc58873346e6de172dcc662874c7bc5a88ab37d8
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/model/User.kt
@@ -0,0 +1,53 @@
+package org.openapitools.model
+
+import java.util.Objects
+import com.fasterxml.jackson.annotation.JsonProperty
+import javax.validation.constraints.DecimalMax
+import javax.validation.constraints.DecimalMin
+import javax.validation.constraints.Max
+import javax.validation.constraints.Min
+import javax.validation.constraints.NotNull
+import javax.validation.constraints.Pattern
+import javax.validation.constraints.Size
+import io.swagger.annotations.ApiModelProperty
+
+/**
+ * A User who is purchasing from the pet store
+ * @param id 
+ * @param username 
+ * @param firstName 
+ * @param lastName 
+ * @param email 
+ * @param password 
+ * @param phone 
+ * @param userStatus User Status
+ */
+data class User(
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("id") val id: kotlin.Long? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("username") val username: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("firstName") val firstName: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("lastName") val lastName: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("email") val email: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("password") val password: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "")
+    @field:JsonProperty("phone") val phone: kotlin.String? = null,
+
+    @ApiModelProperty(example = "null", value = "User Status")
+    @field:JsonProperty("userStatus") val userStatus: kotlin.Int? = null
+) {
+
+}
+
diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/resources/application.yaml b/samples/server/petstore/kotlin-springboot-delegate/src/main/resources/application.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8e2ebcde976d902319adf5d0f9889517ad8cf26a
--- /dev/null
+++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/resources/application.yaml
@@ -0,0 +1,10 @@
+spring:
+  application:
+    name: openAPIPetstore
+
+  jackson:
+    serialization:
+      WRITE_DATES_AS_TIMESTAMPS: false
+
+server:
+  port: 8080